1

さまざまなデータを含む約 3,000 個の CSV ファイルを含むディレクトリがあり、これらをある時点で 1 つのファイルにまとめる必要がありますが、最初に各ファイルからすべてのヘッダー行を削除する必要があります。

通常、このためにファイルを照合してから Excel で開き、ヘッダー行にフィルターをかけてからすべて削除します。残念ながら、これらは合計で約 9M 行になり、Excel はそれを好みません...

誰でもこれを回避する方法を考えることができますか? できれば、ディレクトリ内のすべてのファイルに対して実行されるある種のバッチ スクリプトを使用します。

前もって感謝します、

A.

4

2 に答える 2

0

これがあなたが探しているものかどうかわかりません... C# で重複したヘッダーを取り除く 1 つの方法を次に示します。コードの主な目的は、1 つのヘッダーを保存string headerし、最初の行をスキップしてファイルを読み取ることです ( while (rdr.Peek() != -1))。

また、辞書を使用して各 csv ファイルの行を保存しました。これにより、異なるcsvファイルに重複する行が含まれるのを防ぎます(この機能があなたのケースで役立つかどうかはわかりません)。

Imaginefnameは、マージするファイルを含む文字列配列です。

    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);
           }
        }
     }
于 2013-09-05T15:02:45.123 に答える