4

「|」で区切られた CSV ファイルがあります。フィールドを分離します。

以下のコードを使用してファイルを読み取り、リストに入れています

 var reader = new StreamReader(File.OpenRead(openFileDialog1.FileName));
 List<string> list1 = new List<string>();
 List<string> list2 = new List<string>();
 List<string> list3 = new List<string>();
 List<string> list4 = new List<string>();

 while (!reader.EndOfStream)
 {
     var line = reader.ReadLine();
     var values = line.Split('|');

     list1.Add(values[0]);
     list2.Add(values[1]);
     list3.Add(values[2]);
     list4.Add(values[3]);
 }

次に、それを DataSet に入れます

DataSet ds = new DataSet();
ds.Tables.Add("barcode");

for (int i = 1; i < list1.Count; i++)
{
    ds.Tables[0].Rows.Add(list1[i], list2[i], list3[i], list4[i]);
}

データがこのようなものであれば問題ありません

373|A0000006-04|EACH|2600003347225  
373|A0000006-04|EACH|9556076004684  
373|A0000006-04|EACH|9556076006374  
373|A0000006-04|PK12|2600003347232  
373|A0000006-04|PK12|9556076004691  

ただし、一部のデータは次のようになります。

373|A0000029-01|PK12|1899886
6604250
373|A0000029-01|PK12|2652357563394
373|A0000030-01|EACH|2600001
539189
373|A0000030-01|EACH|8998866604284

ご覧のとおり、一部のデータは 2 行を使用しています。2 つの異なる行ではなく、同じ行として読み取る方法はありますか? または、同じ行であることを識別するために、カンマやセミコロンなどの区切り記号を付ける必要がありますか?

4

4 に答える 4

3

必要なすべての機能をサポートするA Fast CSV Readerなどのライブラリを使用します。

于 2013-03-26T08:30:52.243 に答える
2

List(of T) はインデックスによってもアクセスできます。ループに lineCounter を追加し、分割後に行が 1 つの部分だけで構成されている場合は、コンテンツを前のリスト要素に追加します。(少なくとも最初の行は 4 つの要素にする必要があります)

lineCounter = 0;
while (!reader.EndOfStream)
{
     var line = reader.ReadLine();
     var values = line.Split('|');

     if(values.Length == 1)
     {
        list4[lineCounter-1] += values[0];
     }
     else
     {
          list1.Add(values[0]);
          list2.Add(values[1]);
          list3.Add(values[2]);
          list4.Add(values[3]);
          lineCounter++;
     }

}

OPから提供されたサンプルデータでテストしましたが、うまくいくようです。

于 2013-03-26T08:37:16.427 に答える
0

CSV ファイルの仕様によると、各レコードは別々の行に配置する必要があります (CSV ファイルの仕様はhttp://www.ietf.org/rfc/rfc4180.txtで確認できます)。したがって、あなたの場合、何らかの回避策を講じ、改行をマークするために他の区切り記号を使用する必要があります。

于 2013-03-26T08:33:38.307 に答える
0

強い型指定された配列に直接マッピングするためにFileHelpers Libraryを使用しました。正式な CSV を使用している場合は、それでうまくいきます。

正式な仕様のない区切りデータだけの場合は、他のソリューションが必要になる場合があります。

于 2013-03-26T08:40:28.463 に答える