Мне нужно прочитать несколько файлов csv и объединить их. Объединенные данные используются для создания диаграммы (с помощью элемента управления диаграммой .NET).Чтение csv logfiles с разными заголовками/столбцами
До сих пор я сделал это с помощью простого StreamReader и добавил все к одному DataTable:
while (sr.Peek() > -1)
{
strLine = sr.ReadLine();
strLine = strLine.TrimEnd(';');
strArray = strLine.Split(delimiter);
dataTableMergedData.Rows.Add(strArray);
}
Но теперь есть проблема, что лога могут измениться. Как вы можете видеть здесь, новые лог-файлы имеют дополнительные столбцы:
Моя текущая процедура не работает сейчас, и я прошу совета, как это сделать. Производительность важна из-за того, что каждый файл журнала содержит около 1500 строк и до 100 столбцов, а лог-файлы объединяются до одногодичного периода (равно 365 файлам).
Я бы сделал так: создание DataTable, которое должно содержать все данные в конце и чтение каждого файла журнала в отдельный DataTable. После каждой операции чтения я добавляю отдельный DataTable в «большой» DataTable, проверяю, были ли столбцы изменены и добавили новые столбцы, если они это сделали.
Но я боюсь, что использование DataTables повлияет на производительность.
Примечание: Я делаю это с winforms, но я думаю, что это не имеет значения.
Редактировать: Пробовал CsvReader, но это примерно в 4 раза медленнее, чем мое текущее решение.