CSV Parser в одной рутине / функции? - PullRequest
1 голос
/ 09 марта 2010

Я знаю, что есть несколько библиотек кода, которые могут анализировать файлы CSV в соответствии со стандартом, но по разным причинам мне нужна одна простая подпрограмма (не вся библиотека), которая анализирует CSV в DataTable или массив. Такое животное существует или вымерло? (Желательно C #, но я тоже могу перевести vb.net)

Ответы [ 3 ]

5 голосов
/ 09 марта 2010

Ссылка Microsoft.VisualBasic.FileIO и вы можете использовать TextFieldParser

using (var parser =
    new TextFieldParser(@"c:\data.csv")
        {
            TextFieldType = FieldType.Delimited,
            Delimiters = new string[] { "," }
        })
{
    while (!parser.EndOfData)
    {
        string[] fields;
        fields = parser.ReadFields();
        //go go go!
    }
}
2 голосов
/ 09 марта 2010

Напишите свой собственный метод, который проходит по каждой строке, и используйте метод split, используя запятую в качестве разделителя.

Если вы хотите проанализировать csv с помощью linq, вот простой пример:

http://www.fryan0911.com/2009/05/read-data-from-csv-using-linq.html

0 голосов
/ 08 апреля 2011

Написание собственного парсера CSV нелегко. Есть много крайних случаев, с которыми вы столкнетесь.

Чтение: http://www.secretgeek.net/csv_trouble.asp

@ Ответ spender, вероятно, самый близкий, который вы получите, используя встроенный материал.

Дайте CsvHelper попытку (библиотека, которую я поддерживаю). Это доступно на NuGet. Это очень легкий. Если вам нужен небольшой кусочек кода, вы можете просто скопировать исходный код CsvParser.cs и немного его изменить. Есть в основном одна функция, которая выполняет весь синтаксический анализ, это чуть более 100 строк, включая комментарии. Если вы хотите одну рутину, это было бы хорошо, чтобы захватить.

Если вы используете библиотеку CsvHelper, чтение в коллекцию объектов пользовательских классов будет простым.

var streamReader = // Create StreamReader to your CSV file.
var csvReader = new CsvReader( streamReader );
var myObjects = csvReader.GetRecords<MyObject>();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...