Я пытаюсь прочитать файл csv, используя следующий код. Это исключение, если в данных есть двойные кавычки (""). Я хочу обрабатывать все специальные символы во время чтения.
using (TextReader reader = new StreamReader("C:\\test\test.csv"))
{
using (CsvReader csv = new CsvReader(reader, CultureInfo.InvariantCulture))
{
csv.Read();
csv.ReadHeader();
while (csv.Read())
{
var result= csv[0].Split(';');
}
}
}
Мой файл CSV: строка csv.Read не работает в строке № 3
Name;Location;State;Country
Keka1;Lansing; MI; USA
Keka2;"Ohio"; OH; USA // Error at this line
Keka3;Lansing; MI; USA
Я не хочу избегать кавычек, но хочу включить их. Пожалуйста посоветуй.
С библиотекой CSV вам не понадобится Split(';')
.
Вам нужно установить CsvConfiguration.Delimiter = ";"
, как показано в этот ответ, на Как мы можем написать разделитель, например, sep=, используя библиотеку CsvHelper?. Тогда все должно быть готово. Вам не нужно будет делать csv[0].Split(';');
, так как библиотека разделит строки на ячейки, используя указанный разделитель. На самом деле я думаю, что это дубликат этого вопроса, согласны?
Да, var config = new CsvConfiguration(CultureInfo.CurrentCulture) { Delimiter = ";" };
и тогда using (var csv = new CsvReader(reader, config))
работает, см. dotnetfiddle.net/SnBQAg. Закрытие как дубликат.
Какой CsvReader
класс вы используете? (Я создал такой класс под названием SoftCircuits.CsvParser.)
В любом случае, вы не используете его правильно. Код, который у вас есть, может просто использовать обычный поток ввода, потому что вы, кажется, читаете строку за раз, а затем анализируете ее. Читатели CSV проанализируют его для вас и обработают поля с двойными кавычками.
Я использую класс CsvHelper. Я хочу читать построчно
Я протестировал класс SoftCircuits.CsvParser, и он прекрасно обрабатывает кавычки.
TextFieldParser
Класс