I ' Я пишу простое приложение для импорта и должен прочитать файл CSV, показать результат в DataGrid
и показать поврежденные строки файла CSV в другой сетке. Например, покажите линии, которые короче 5 значений в другой сетке. Я пытаюсь сделать это так:
StreamReader sr = new StreamReader(FilePath);
importingData = new Account();
string line;
string[] row = new string [5];
while ((line = sr.ReadLine()) != null)
{
row = line.Split(',');
importingData.Add(new Transaction
{
Date = DateTime.Parse(row[0]),
Reference = row[1],
Description = row[2],
Amount = decimal.Parse(row[3]),
Category = (Category)Enum.Parse(typeof(Category), row[4])
});
}
, но в этом случае очень сложно работать с массивами. Есть ли лучший способ разделить значения?
Не изобретайте велосипед. Воспользуйтесь преимуществами того, что уже есть в .NET BCL.
Microsoft.VisualBasic
(да, там написано VisualBasic, но он работает и на C # точно так же - помните, что в конце это всего лишь IL) Класс Microsoft.VisualBasic.FileIO.TextFieldParser
для синтаксического анализа файла CSV Вот пример кода:
using (TextFieldParser parser = new TextFieldParser(@"c:\temp\test.csv"))
{
parser.TextFieldType = FieldType.Delimited;
parser.SetDelimiters(",");
while (!parser.EndOfData)
{
//Processing row
string[] fields = parser.ReadFields();
foreach (string field in fields)
{
//TODO: Process field
}
}
}
Он отлично работает для меня в моих проектах C #.
Вот еще несколько ссылок / информации:
По моему опыту, существует много разных форматов csv. Особенно то, как они обрабатывают экранирование кавычек и разделителей внутри поля.
Это варианты, с которыми я столкнулся:
Я пробовал многие существующие парсеры csv, но нет ни одного, который мог бы обрабатывать варианты, с которыми я столкнулся. Также трудно узнать из документации, какие варианты экранирования поддерживают парсеры. .
В своих проектах я теперь использую либо VB TextFieldParser, либо специальный разделитель.
CSV может быстро усложниться реальным .
Используйте что-нибудь надежное и проверенное:
FileHelpers:
www.filehelpers.net
FileHelpers - это бесплатная и простая в использовании библиотека .NET для импорта / экспорта данных из записей фиксированной длины или записей с разделителями в файлы, строки или потоки.
Я использую это здесь:
http://www.codeproject.com/KB/database/GenericParser.aspx
В последний раз, когда я искал что-то подобное, я нашел это как ответ на этот вопрос.