2013-09-05 2 views
0

다양한 데이터가 포함 된 3k CSV 파일이있는 디렉터리가 있습니다.이 파일을 특정 시점에 하나의 파일로 대조해야하지만 먼저 각 파일에서 모든 헤더 행을 제거해야합니다.CSV의 헤더 행 제거

일반적으로 파일을 대조 한 다음 Excel에서 열어서 모두 삭제하기 전에 머리글 행을 필터링하면됩니다. 불행히도이 수치는 약 9 백만 행 정도입니다. Excel은 그 점을 좋아하지 않습니다 ...

아무도이 문제를 해결할 수 있습니까? 디렉토리의 모든 파일을 통해 실행되는 일종의 일괄 처리 스크립트가 바람직합니다. 사전에

감사합니다,

A.

+0

당신이 C#에서 이렇게시겠습니까를 두 번? – Mayou

+0

전혀 C#을 사용하지 않아서 일부만 좋았습니다.이 서비스는 오히려 도움이되지 않는 * 에헴 * 통신 공급자에 대한 통계를 수집하고 있기 때문에 멋지고 신속합니다. – Ahhhhbisto

+0

여기에 첫 번째 시도가 있습니다. – Mayou

답변

1

다음은 각 파일의 첫 번째 줄을 제거 할 헤더 줄이라고 가정합니다.

파일에 <TAB> 문자가 포함되어 있지 않고 파일이 너무 크면 제대로 작동합니다. 세부 사항을 기억할 수는 없지만, 입력 파일이 너무 커지면 리디렉션 된 출력이있는 MORE가 키 누르기를 기다리는 경우가 있습니다.

(for %F in (*.csv) do @more +1 "%F") >concat_csv.txt 

출력 파일에 다른 확장자를 지정하여 출력을 처리하지 않도록했습니다. 대안은 출력을 CSV 파일로 리디렉션하지만 다른 폴더에 리디렉션하는 것입니다.

배치 파일에서 이것을 사용하려면, 다음 퍼센트 (%F%%F이된다)

0

나는이 여기에 ... 당신이 찾고있는 C#에서 중복 헤더를 제거하는 한 방법입니다 확실하지 않다. 이 코드의 주요 목적은 하나의 헤더를 저장하고 string header이며 첫 번째 행 (while (rdr.Peek() != -1))을 건너 뜀으로써 파일을 읽는 것입니다.

또한 각 csv 파일의 행을 저장하기 위해 사전을 사용했습니다. 이렇게하면 여러 csv 파일의 중복 행이 포함되지 않습니다 (이 함수가 도움이되는지 확실하지 않습니다).

fname은 병합 할 파일이 들어있는 문자열 배열입니다.

Dictionary<string, string> dict = new Dictionary<string, string>(); 
    string destinationFile = <write path of your destination file>; 
    string dir = <write path of your original directory> 
    string header = ""; 

    if (dir.Length != 0) 
    { 
     foreach (string f in fnames) 
     { 
      using (StreamReader rdr = new StreamReader(dir + "\\" + f)) 
      { 
      header = rdr.ReadLine(); 

      while (rdr.Peek() != -1) 
      { 
       string ln = rdr.ReadLine(); 
       string[] split_ln = ln.Split(','); 

       string value = (split_ln.Length != 2) ? string.Join(",", split_ln.Skip(1)) : split_ln[1]; 
       dict.Add(split_ln[0], value); 

       } 
      } 
     } 

     using (StreamWriter wr = new StreamWriter(destinationFile)) 
     { 
      wr.WriteLine(header); 
      foreach (var pair in dict) 
      { 
       wr.WriteLine("{0},{1}", Convert.ToString(pair.Key), pair.Value); 
      } 
     } 
    }