Я пытаюсь прочитать *.csv
файл.
*.csv
-File состоят из двух колонн , разделенных точкой с запятой ( « ; »).
Я могу прочитать *.csv
-файл с помощью StreamReader и разделить каждую строку с помощью Split()
функции. Я хочу сохранить каждый столбец в отдельный массив, а затем отобразить его.
Возможно ли это сделать?
";"
качестве разделителя ... это делает CSV нестандартным imo :(Ответы:
Вы можете сделать это так:
источник
using
пункт здесь, или по крайней мере , вручную так что это ресурс.Close()
reader
IDisposible
column1;"Special ; char in string";column3
- tools.ietf.org/html/rfc4180Мой любимый парсер CSV встроен в библиотеку .NET. Это скрытое сокровище внутри пространства имен Microsoft.VisualBasic. Ниже приведен пример кода:
Не забудьте добавить ссылку на
Microsoft.VisualBasic
Более подробная информация о парсере приведена здесь: http://codeskaters.blogspot.ae/2015/11/c-easiest-csv-parser-built-in-net.html
источник
Microsoft.VisualBasic
сборку фреймворка, поскольку на нее обычно не ссылаются по умолчанию.LINQ способ:
^^ Неправильно - Редактировать Ник
Похоже, что первоначальный ответчик пытался заполнить
csv
двухмерный массив - массив, содержащий массивы. Каждый элемент в первом массиве содержит массив, представляющий этот номер строки с каждым элементом во вложенном массиве, содержащем данные для этого конкретного столбца.источник
Вы не можете сразу создать массив, потому что вам нужно знать количество строк с начала (а для этого потребуется дважды прочитать файл csv)
Вы можете хранить значения в два,
List<T>
а затем использовать их или преобразовать в массив, используяList<T>.ToArray()
Очень простой пример:
NB
Обратите внимание, что это очень простой пример . Использование
string.Split
не учитывает случаи, когда некоторые записи содержат разделитель;
внутри него.Для более безопасного подхода рассмотрите возможность использования некоторых специфичных для csv библиотек, таких как CsvHelper, в nuget.
источник
;
что является частью значения, например"value with ; inside it"
. CSV окружают значения, содержащие специальные символы с двойными кавычками, чтобы сказать, что это буквальная строка.Просто наткнулся на эту библиотеку: https://github.com/JoshClose/CsvHelper
Очень интуитивно понятный и простой в использовании. Имеет пакет nuget, который быстро реализуется: http://nuget.org/packages/CsvHelper/1.17.0 . Также, кажется, активно поддерживается, что мне нравится.
Настроить его для использования точки с запятой легко: https://github.com/JoshClose/CsvHelper/wiki/Custom-Configurations
источник
Microsoft.VisualBasic.FileIO.TextFieldParser
(см. Ответ Хабиба)?Я обычно использую этот синтаксический анализатор из codeproject , так как есть множество экранированных символов и аналогичных, которые он обрабатывает для меня.
источник
Вот мой вариант ответа с наибольшим количеством голосов:
Затем
csv
переменную можно использовать как в следующем примере:источник
Если вам нужно пропустить (head-) строки и / или столбцы, вы можете использовать это для создания двумерного массива:
Это очень полезно, если вам необходимо сформировать данные перед дальнейшей обработкой (при условии, что первые 2 строки состоят из заголовка, а первый столбец - заголовок строки, который вам не нужен в массиве, потому что вы просто хочу рассмотреть данные).
NB. Вы можете легко получить заголовки и первый столбец, используя следующий код:
Этот пример кода предполагает следующую структуру вашего
*.csv
файла:Примечание: если вам нужно пропустить пустые строки - что иногда удобно, вы можете сделать это, вставив
между
from
и вselect
заявлении в LINQ примеры кода выше.источник
Вы можете использовать Microsoft.VisualBasic.FileIO.TextFieldParser dll в C # для повышения производительности
получить пример кода из статьи выше
источник
Привет всем, я создал статический класс для этого. + проверка столбца + удаление знака квоты
источник
источник
Вот особый случай, когда одно из полей данных имеет точку с запятой (";") как часть своих данных, в этом случае большинство ответов выше потерпит неудачу.
Решение в этом случае будет
источник
Библиотека Angara.Table с открытым исходным кодом позволяет загружать CSV в типизированные столбцы, поэтому вы можете получить массивы из столбцов. Каждый столбец может быть проиндексирован как по имени, так и по индексу. См. Http://predictionmachines.github.io/Angara.Table/saveload.html .
Библиотека следует RFC4180 для CSV; это позволяет вывод типа и многострочные строки.
Пример:
Вы можете увидеть тип столбца, используя тип столбца, например,
Поскольку библиотека ориентирована на F #, вам может понадобиться добавить ссылку на сборку FSharp.Core 4.4; нажмите «Добавить ссылку» в проекте и выберите FSharp.Core 4.4 в разделе «Сборки» -> «Расширения».
источник
Я потратил несколько часов в поисках подходящей библиотеки, но, наконец, я написал свой собственный код :) Вы можете читать файлы (или базы данных) любыми инструментами, которые вам нужны, а затем применять следующую процедуру к каждой строке:
источник
Я использую csvreader.com (платный компонент) в течение многих лет, и у меня никогда не было проблем. Он прочный, маленький и быстрый, но за него нужно платить. Вы можете установить разделитель на то, что вам нравится.
источник
Я просто студент, работающий над магистерской диссертацией, но я так решил, и это хорошо сработало для меня. Сначала вы выбираете файл из каталога (только в формате csv), а затем помещаете данные в списки.
источник
Все еще не так. Вам нужно компенсировать "" в кавычках. Вот мое решение Microsoft в стиле CSV.
источник
У меня есть библиотека, которая делает именно то, что вам нужно.
Некоторое время назад я написал простую и достаточно быструю библиотеку для работы с CSV-файлами. Вы можете найти его по следующей ссылке: https://github.com/ukushu/DataExporter
Он работает с CSV как с 2-х мерным массивом. Точно так же, как вам нужно.
Например, в случае, если вам нужны все значения 3-й строки, вам нужно написать:
или прочитать 2-ю ячейку
источник
посмотри на это
использование CsvFramework;
using System.Collections.Generic;
пространство имен CvsParser {
}
источник