Следуя предыдущей нити Object reference on array with regex.replace()Разбор запятые в поле с TextFieldParser вызывает дополнительный столбец
Я имею в cpath
несколько столбцов, которые содержат поля, такие как street,""test,format"", casio
. К сожалению,
csvReader.SetDelimiters(new string[] { "," });
добавляет пустые дополнительные колонки к DataTable
csvData
из-за запятой между test and format
. Следовательно, следующий опрос:
Существует ли уловка для удаления запятой от """test,format"""
, чтобы получить street,""test format"", casio
в csvData
?
Заранее спасибо
EDIT
private static List<string[]> RemoveComaDataFromCSVFile(string csv_file_path)
{
List<string[]> allLineFields = new List<string[]>();
try
{
using (TextReader sr = new StringReader(csv_file_path))
using (TextFieldParser csvReader = new TextFieldParser(csv_file_path))
{
csvReader.Delimiters=new[] { "," };
csvReader.HasFieldsEnclosedInQuotes = true;
while (!csvReader.EndOfData)
{
string[] fieldData = csvReader.ReadFields();
string pattern = "\"";
string replacement = "";
Regex rgx = new Regex(pattern);
//Making empty value as null
for (int i = 0; i < fieldData.Length; i++)
{
//Remove quotation marks on Fields
fieldData[i] = Regex.Replace(fieldData[i], pattern, replacement);
if (fieldData[i] == "")
{
fieldData[i] = null;
}
}
//csvData.Rows.Add(fieldData);
allLineFields.Add(fieldData);
}
}
}
catch (Exception ex)
{
}
return allLineFields;
}
'TextFieldParser' имеет свойство' HasFieldsEnclosedInQuotes', который вы должны установить в 'true'. Тогда запятая в '' test, format'' не имеет значения. Вы также должны показать код, который генерирует «DataTable». –
@TimSchmelter: потому что я получаю csv 'data', содержащие' coma delimiter' и, к сожалению, я не могу его изменить. однако я никогда не ожидал, что некоторые поля могут содержать ',' messing all up. поэтому я действительно застрял ... –
Вы прочитали остальную часть моего комментария;) 'TextFieldParser' не имеет проблем с запятой, если поле завернуто в кавычки –