2013-07-18 2 views
1

여러 csv 파일을 읽고 병합해야합니다. 병합 된 데이터는 차트 생성에 사용됩니다 (.NET 차트 컨트롤 사용).다른 헤더/열이있는 csv 로그 파일 읽기

는 지금까지 간단한에서는 StreamReader와 함께이 일을하고 DataTable을 하나에 모든 것을 추가 한 :

while (sr.Peek() > -1) 
{ 
    strLine = sr.ReadLine(); 
    strLine = strLine.TrimEnd(';'); 
    strArray = strLine.Split(delimiter); 
    dataTableMergedData.Rows.Add(strArray); 
} 

을하지만 지금 문제는 로그 파일을 변경할 수,있다. 여기서 볼 수 있듯이 최신 로그 파일에는 다음과 같은 추가 열이 있습니다. logfile schema

현재 절차가 작동하지 않으며이를 수행하는 방법에 대해 조언을 구하고 있습니다. 성능은 중요합니다. 왜냐하면 모든 로그 파일에는 약 1500 개의 행과 최대 100 개의 열이 포함되고 로그 파일은 1 년 기간 (365 개의 파일과 동일)까지 병합됩니다.

이렇게하면됩니다 : 마지막에 모든 데이터를 포함하고 각 로그 파일을 별도의 DataTable로 읽어야하는 DataTable 만들기. 각 읽기 작업 후에 별도의 DataTable을 "큰"DataTable에 추가하고 열이 변경되었는지 확인하고 변경 한 경우 새 열을 추가합니다.

하지만 DataTables를 사용하면 성능에 영향을 미칠 수 있습니다.

참고 : 저는 winforms로이 작업을 수행하고 있지만 어쨌든 중요하지 않습니다.

편집 : 시도한 CsvReader 그러나 이것은 현재 솔루션보다 약 4 배 느립니다. 시험 시간은 내가 그것을 내가 질문에 그것을 설명하는 방법을 한 후

답변

1

는 :

첫째 나는 마지막에 모든 데이터를 포함해야 DataTable 만들었습니다. 그런 다음 foreach 루프로 모든 로그 파일을 살펴보고 모든 로그 파일에 대해 DataTable을 작성하고 로그 파일의 csv-data로 채 웁니다. 이 표는 첫 번째 DataTable에 추가되며 다른 열이 있는지에 관계없이 올바르게 추가됩니다.

이것은 단순한 StreamReader에 비해 약간의 성능이 들지만 LumenWorks CsvReader보다 더 쉽게 확장하고 더 빠릅니다.