0

CSVからインポートしようとしているデータは次のとおりです

Time|Person|Products|Address

(now)|person1|val1*val2*val3|adr1

*改行/キャリッジリターンはどこですか

インポートすると、次のようになります。

(now)|person1|val1val2val3|adr1 

必要なものは次のとおりです。

(now)|person1|val1|adr1

(now)|person1|val2|adr1 etc.

私は試しました: 主に に基づいて CSV パーサーをカスタムコーディングするstring.Spilt()と、正確な結果が得られ、処理に時間がかかりました。Sebastien Lorion のものを試してみましCSVReaderたが、まったく同じ結果が得られましたが、既存のコードに挿入するのは非常に高速で簡単でした。TextFieldParserまったく同じ結果でVBを試しました。

さて、ここで私がやろうと思ったことは次のとおりです。

何らかの方法でフィールドの値を渡します (それらを参照する方法がわかりません)。List<string>オブジェクトを返す別のメソッドに到達すると、反復して DataTable に追加し、そこから必要なことを実行できます。古いフォークで私の脳幹を取り除いてください。小声でつぶやきながら歩き回る。

TextFieldParser コードは次のとおりです。

OpenFileDialog op = new OpenFileDialog();
op.ShowDialog();
TextFieldParser parser = new TextFieldParser(new StreamReader(op.FileName));
parser.SetDelimiters(",");

while (!parser.EndOfData)
{
    contents.AddRange(parser.ReadFields());
}
4

2 に答える 2

1

この CSV 形式に固執する必要がある場合は、上記のようにすべてを読み込むように思えます。しかしその後、データのコレクションをループし、製品を必要なコンポーネントに手動で文字列分割します。

すべてを 1 回のパスで実行しようとすると、問題が複雑になりすぎます。

個別のクラスを取得したら、次のようにキャリッジ リターンで製品を分割できます。

string[] result = input.Split(new string[] {"\n", "\r\n"}, StringSplitOptions.RemoveEmptyEntries);
于 2011-08-10T14:16:06.597 に答える
0

FileHelpersライブラリをご覧ください。それは非常に高速で非常に柔軟です。やりたいことのために、カスタム処理ロジックを少し書く必要があると思いますが。

于 2011-08-10T14:13:17.920 に答える