0

txtファイルをデータベースにインポートするのにほとんど問題はありません。ファイルの構造は少し難しいです。最初の行には、次のような説明のみがあります。

  • 典型的なダミー
  • ステータス準備完了
  • 3番など。

説明 (20 行から 22 行の間) の後に、次のような表が続きます。

PartStatus    Result  Measurement1      Measurement2      .....
900           OK      0                 20                .....
600           Passed  30                400               .....

テーブルがどの行から始まるかわかりません。ファイルを読み取って処理し、データベースに書き込む最良の方法は何ですか?

現時点では、StreamReader を使用して各文字列をデータテーブルに追加しています。

よろしく

アルミン

サンプルファイル: テストファイル

4

3 に答える 3

1

CodeplexのCommonLibrary.NETプロジェクトには専用のCSV解析サポートもあります。このライブラリを使用したCSV解析の例はここにあります

アップデート

上記のようなテキストを解析し、 CommonLibrary.NETを使用するために使用できるコードを次に示します。元のテキストは最初にテーブルヘッダー(origText.Substring(origText.IndexOf("PartStatus")))から始まるように切り詰められ、正規表現の一致を使用して1つ以上の連続するスペース文字が単一のコンマ(Regex.Replace(sometext, "[ ]+", ","))に置き換えられることに注意してください。

var origText =
    "Type Dummy\n" +
    "Status Ready\n" +
    "# Comment line\n" +
    "# Another comment line\n" +
    "PartStatus    Result  Measurement1      Measurement2\n" +
    "900           OK      0                 20\n" +
    "600           Passed  30                400\n";

var trimmedText = 
    Regex.Replace(origText.Substring(origText.IndexOf("PartStatus")), 
                  "[ ]+", ",");

var csvDoc = Csv.LoadText(trimmedText, true, false, ",");

Console.WriteLine(csvDoc.Get<int>(1, "Measurement2"));
Console.WriteLine(csvDoc.Get<string>(0, "Result"));

出力が生成されます:

400
OK

CommonLibrary.NETのCSV解析コンポーネントは、CSVデータをADO.NET に変換する簡単な方法も提供しますDataTable

var table = csvDoc.ToDataTable();
于 2012-08-07T08:00:49.860 に答える
1

TextFiledParserクラスを使用して、無効な行をスキップすることができます。

using (var reader = new TextFieldParser(@"c:\YourFile"))
{
    reader.TextFieldType = FieldType.Delimited;
    reader.Delimiters = new string[] {","};
    string[] currentRow = null;
    while (!reader.EndOfData)
    {
        try
        {
            currentRow = reader.ReadFields();
            // do something with the values
        }
        catch (MalformedLineException ex)
        {
            // skip invalid lines and handle it
        }
    }
}
于 2012-08-07T07:53:49.897 に答える
1

これを試してください:File Helpers。私は過去にそれを試してみました。これにより、CSV を読み取るプロセスが簡素化される可能性があります。

于 2012-08-07T07:47:26.107 に答える