3

データベースに保存する前に解析している .csv ファイルがいくつかあります。

アプリケーションをより堅牢にし、データベースに保存する前に .csv ファイルの検証を実行したいと考えています。

それで、良いリンク、コード例、パターン、またはこれを行う方法に関するアドバイスがあるかどうかを皆さんに尋ねています。

.csv ファイルの例を以下に貼り付けます。.csv ファイルのさまざまなデータ フィールドは、タブで区切られています。データの新しい行はそれぞれ新しい行にあります。

私は、検証すべきことについて少し考えていて、以下のリストを思いつきました (リストに追加すべきだと思われるものがあれば、他の提案をお待ちしています?)

Correct file encoding.
That file is not empty.
Correct number of lines/columns.
correct number/text/date formats.
correct number ranges.

これが私の .csv ファイルの外観です (2 行のファイルで、1 行のデータはタブで区切られています)。

4523424 A123456 GT-P1000    mobile phone    Samsung XSD1234 135354191325234
345353  A134211 A8181   mobile phome    HTC S4112-ad3   111911911932343

上記の文字列表現は次のようになります。

"4523424\tA123456\tGT-P1000\tmobile phone\tSamsung\tXSD1234\t135354191325234\r

\n345353\tA134211\tA8181\tmobile phome\tHTC\tS4112-ad3\t111911911932343\r\n"

C#でこれを行う方法について、良いデザイン、リンク、パターン、コード例などはありますか?

4

4 に答える 4

0

エイドリアンとニプン・アンバスタ

私の質問にお答えいただきありがとうございます。

.csv ファイルを自分で検証するソリューションを作成して、問題を解決しました。

adrianm のコードを利用することで、より洗練されたソリューションを作成できる可能性は十分にありますが、私はそうしませんでした。

以下のリストを検証しています。

  • 空のファイル new FileInfo(dto.AbsoluteFileName).Length == 0

  • ファイル行のフォーマットが間違っています。string[] items = line.Split('\t'); if (items.Count() == 20)

  • 行フィールドのデータ型が間違っています。int 番号; bool isNumber = int.TryParse(dataRow.ItemArray[0].ToString(), out number);

  • 必須の行フィールドがありません。if (dataRow.ItemArray[4].ToString().Length < 1)

.csv ファイルの内容を確認するために、次のコード例に基づいてコードを作成しました。

http://bytes.com/topic/c-sharp/answers/256797-reading-tab-delimited-file

于 2013-05-30T14:01:10.893 に答える
-1

おそらく http://www.codeproject.com/Articles/9258/A-Fast-CSV-Readerをご覧ください。

私たちはプロジェクトでこれを使用してきました。これは非常に堅牢で、それが言うことを実行します。

于 2013-05-17T12:04:20.840 に答える