Мои данные CSV выглядит так:
Заголовок1, Заголовок 2, heading3, heading4, heading5, value1_1, value2_1, value3_1, value4_1, value5_1, value1_2, value2_2, value3_2, value4_2, value5_2 ....
Как вы читаете эти данные и конвертируете в массив, подобный этому, используя Javascript ?:
[заголовок1: значение1_1, заголовок2: значение2_1, заголовок3: значение3_1, заголовок4: значение4_1, заголовок5: значение5_1], [заголовок1: значение1_2, заголовок2: значение2_2, заголовок3: значение3_2, заголовок4: значение4_2, заголовок 5: значение5_2] ....
Я пробовал этот код, но не повезло!
<script type="text/javascript">
var allText =[];
var allTextLines = [];
var Lines = [];
var txtFile = new XMLHttpRequest();
txtFile.open("GET", "file://d:/data.txt", true);
txtFile.onreadystatechange = function()
{
allText = txtFile.responseText;
allTextLines = allText.split(/\r\n|\n/);
};
document.write(allTextLines);<br>
document.write(allText);<br>
document.write(txtFile);<br>
</script>
javascript
jquery
Махеш Тумар
источник
источник
file://...
разрешеноXMLHttpRequest
.Ответы:
ПРИМЕЧАНИЕ. Я придумал это решение, прежде чем мне напомнили обо всех «особых случаях», которые могут возникнуть в действительном файле CSV, например, экранированные кавычки. Я оставляю свой ответ тем, кто хочет чего-то быстрого и грязного, но я рекомендую ответ Эвана для точности.
Этот код будет работать, когда ваш
data.txt
файл представляет собой одну длинную строку записей, разделенных запятыми, без перевода строки:data.txt:
JavaScript:
Следующий код будет работать с «истинным» CSV-файлом с разрывами строк между каждым набором записей:
data.txt:
JavaScript:
http://jsfiddle.net/mblase75/dcqxr/
источник
allText.split(/\r\n|\n/)
разделяет. Если все ваши данные на самом деле представляют собой одну длинную строку данных, разделенных запятыми, без перевода строки, это не настоящий файл CSV.1, "IETF allows ""quotes"", commas and \nline breaks"
это разрешено, поскольку строка окружена двойными кавычками, а двойные кавычки экранированы.var allTextLines = allText.split("\r");
После этого он работал отлично! Спасибо!Не нужно писать свой собственный ...
В библиотеке jQuery-CSV есть функция,
$.csv.toObjects(csv)
которая выполняет сопоставление автоматически.Примечание. Библиотека предназначена для обработки любых данных CSV, совместимых с RFC 4180 , включая все неприятные крайние случаи, которые игнорируются большинством «простых» решений.
Как уже говорилось в @Blazemonger, сначала нужно добавить разрывы строк, чтобы сделать данные действительными CSV.
Используя следующий набор данных:
Используйте код:
Вывод, сохраненный в «data», будет:
Примечание. Технически способ написания сопоставления ключ-значение недопустим в JavaScript. Объекты, содержащие пары ключ-значение, должны быть заключены в квадратные скобки.
Если вы хотите попробовать это сами, я предлагаю вам взглянуть на демонстрацию базового использования на вкладке toObjects ().
Отказ от ответственности: я оригинальный автор jQuery-CSV.
Обновить:
Отредактировано для использования набора данных, предоставленного операцией, и содержит ссылку на демонстрацию, где данные могут быть проверены на достоверность.
Update2:
Из-за закрытия Google Code. jquery-CSV переехал на GitHub
источник
csv
переданный параметр является строкой csv - считайте файл csv как текст, чтобы получить строку csv.Не разделяйте запятыми - это не сработает для большинства файлов CSV, и у этого вопроса слишком много представлений, чтобы входные данные типа asker можно было применить ко всем. Парсинг CSV довольно страшен, так как нет действительно официального стандарта, и многие авторы текста с разделителями не рассматривают крайние случаи.
Этот вопрос старый, но я считаю, что теперь есть лучшее решение, когда доступен Papa Parse . Это библиотека, которую я написал с помощью авторов, которая анализирует текст или файлы CSV. Это единственная из известных мне JS-библиотек, которая поддерживает файлы размером в гигабайты. Он также корректно обрабатывает некорректный ввод.
1 ГБ файл анализируется за 1 минуту:
( Обновление: в Papa Parse 4 этот же файл занимал всего около 30 секунд в Firefox. Papa Parse 4 теперь является самым быстрым из известных анализаторов CSV для браузера.)
Парсинг текста очень прост:
Парсинг файлов также прост:
Потоковые файлы похожи (вот пример потокового удаленного файла):
Если ваша веб-страница блокируется во время синтаксического анализа, Papa может использовать веб-работников, чтобы ваш веб-сайт реагировал.
Папа может автоматически определять разделители и сопоставлять значения со столбцами заголовка, если имеется строка заголовка. Он также может превращать числовые значения в действительные типы чисел. Он соответствующим образом анализирует разрывы строк, кавычки и другие странные ситуации и даже обрабатывает некорректно введенные данные настолько надежно, насколько это возможно. Я черпал вдохновение из существующих библиотек для создания папы, поэтому поддерживаю другие реализации JS.
источник
Я использую d3.js для анализа файла CSV. Очень прост в использовании. Вот документы .
шаги:
Используя Es6;
Пожалуйста, смотрите документы для более.
Обновление - d3-запрос устарел. вы можете использовать d3-fetch
источник
Вы можете использовать PapaParse, чтобы помочь. https://www.papaparse.com/
Вот CodePen. https://codepen.io/sandro-wiggers/pen/VxrxNJ
источник
Вот функция JavaScript, которая анализирует данные CSV и учитывает запятые в кавычках.
Пример использования функции для анализа файла CSV, который выглядит следующим образом:
в массивы:
Вот как вы можете преобразовать данные в объекты, такие как csv-парсер D3 (который является надежным сторонним решением):
Вот рабочая скрипка этого кода .
Наслаждайтесь! - Курран
источник
Вот еще один способ прочитать внешний CSV в Javascript (используя jQuery).
Это немного длиннее, но я чувствую, что, считывая данные в массивы, вы можете точно следовать процессу и облегчить поиск и устранение неисправностей.
Мог бы помочь кому-то еще.
Пример файла данных:
И вот код:
Надеюсь, это поможет кому-то в будущем!
источник
)
в строке 45 отсутствовал знак, поэтому я добавил его, но теперь в строке 9 выдается ошибка консолиUncaught ReferenceError: $ is not defined at index.html:9
Не могли бы вы помочь в этом?Мне нравится, когда регулярное выражение делает как можно больше. Это регулярное выражение обрабатывает все элементы как в кавычках или без кавычек, за которыми следует разделитель столбцов или разделитель строк. Или конец текста.
Вот почему это последнее условие - без него это был бы бесконечный цикл, поскольку шаблон может соответствовать полю нулевой длины (полностью допустимо в csv). Но так как $ является утверждением нулевой длины, он не будет переходить к несоответствию и завершать цикл.
И к вашему сведению, мне пришлось сделать второй вариант, исключив кавычки, окружающие значение; похоже, что он выполнялся до первой альтернативы на моем движке JavaScript и рассматривал кавычки как часть значения без кавычек. Я не буду просить - просто заставил это работать.
источник
Согласно принятому ответу ,
Я получил это на работу, изменив 1 на 0 здесь:
изменился на
Он будет вычислять файл с одной непрерывной линией как значение allTextLines.length, равное 1. Поэтому, если цикл начинается с 1 и выполняется до тех пор, пока он меньше 1, он никогда не будет запущен. Отсюда и пустое окно с предупреждением.
источник
Если вы хотите решить эту проблему без использования Ajax , используйте
FileReader()
Web API .Пример реализации:
.csv
файлисточник
источник
На самом деле вы можете использовать легковесную библиотеку под названием any-text .
или используйте async-await:
источник