У меня есть следующий сегмент кода для чтения csv-файла. У меня проблемы с линиями чтения, которые не являются стандартными. Например, линия, какC# textFieldParser error
105,"XXX Bank Azerbaijan" CJSC,1078 ,AZ,Baku,"xxx street",Nasimi district
переходит в поле поймать, так как во втором поле «XXX Банк Азербайджана» ЗАО имеет котировки не прямо рядом с запятыми. Однако, когда я открываю этот файл в Excel, он не имеет каких-либо проблем и разделяет поля правильно, как:
105|XXX Bank Azerbaijan CJSC|1078|AZ|Baku|xxx street|Nasimi district
где я |
в качестве разделителя столбцов. Есть ли способ получить тот же эффект, используя TextFieldParser
, иначе мне понадобится использовать другой csv-ридер.
using (TextFieldParser parser = new TextFieldParser(fileName, Encoding.GetEncoding("windows-1252")))
{
parser.TextFieldType = FieldType.Delimited;
parser.SetDelimiters(",");
parser.TrimWhiteSpace = true;
parser.HasFieldsEnclosedInQuotes = true;
parser.ReadLine(); // Reads dummy header
while (!parser.EndOfData)
{
try
{
string[] fieldRow = parser.ReadFields();
T fieldsClass = new T();
fieldsClass.Initialize(fieldRow);
data.Add(fieldsClass);
rowCount++;
}
catch
{
Console.WriteLine("Skipping line" + parser.ErrorLine);
}
}
}
«Не удалось прочитать», что означает исключение, или включает в себя кавычки, которые вы не хотите включать, пропускает строку? – artm
Отредактировано не прочитано, как попадает в поле catch – adam
Я думаю, что ваш парсер уже не сможет разобрать запятую в строке. Ожидаемое поведение '' Foo, Bar "', вероятно, не '' Foo | Bar "'? –