2011-04-21 63 views
1

私はC#.net Webアプリケーションを作成しています。ユーザーはCSVファイルをアップロードして処理されます。これらのCSVファイルには多数のデータ型が含まれており、そのうちのいくつかに問題があります。科学術記法(91234563000000000000の代わりに9.1234563E + 18)でインポートされている20桁の受領番号フィールドがあり、先行ゼロがドロップされています。先頭のゼロは、別の4桁の店舗番号フィールドにもドロップされます。OleDB-stringデータ型を使用したCSVファイルのインポート?

私は、データ型を定義するためにSchema.iniファイルを作成する方法について読んだことがありますが、各ファイルはファイル名が異なります。つまり、プログラムで新しいスキーマファイルを生成する必要があります。アプリケーションは同時に、このオプションのルールの一種。

誰にでもアドバイスがありますか?

+0

OleDbではなく、専用のCSVリーダーを使用するのが最適なオプションです。 – svick

+0

CSVのデータは正しいとは言えますが、インポートされたデータに先行ゼロがドロップされていますか?ちょうど私があなたを正しく理解していることを確認したい。 –

答えて

0

このCSVファイルはExcelで作成されていますか?そうであれば、ユーザーに正しいデータ型に設定された列があることを確認します。前にも同様の問題がありましたが、ユーザーには日付フィールドが別のタイプとして設定されているため、20100408のようなものを返す代わりに、私は24782のようになります:-)

それ以外の場合は、各フィールドにはストレートテキストがあります。そして、自分で変換を処理します。

+0

ExcelからデータをエクスポートしてサンプルCSVを作成しましたが、これでテストしています。たぶん私は夢中ですが、Excelのデータ型を変更することは何もしないと思います。それはプレーンテキストのデータ(CSVファイル内)で、スキーマ情報は含まれていません。ファイルを解析するコードを手作業で書く必要がありますが、既存の機能を使用することをお勧めします。 – Scott

+0

ああ、ええ...あなたはまったく正しい。私はそのデータを読み込むためにExcelReaderカスタムクラスを使用していました。私の悪い!奇妙なことにもかかわらず、ジェットパーサーはその数を科学的表記に変換しています...?がんばろう! – Purj0001

0

ファイルを手動で読み込んでフィールドを分割するカスタムコードを書く必要があるようです。一度に1行ずつ読みやすく、String.Splitメソッドを使用して個々のフィールドを取得することができます。もちろん、これは、CSVファイルが常に同じ形式になっているので、ファイルがどこから来ても同じ方法で各フィールドを処理できます。これにより、各フィールドを正確に処理することができます。

関連する問題