2008-08-29 5 views
3

さまざまなテキストファイル(いくつかの区切りファイルといくつかの固定幅ファイルがあります)から読み込む必要があります。私は、行ごとに(File.ReadLineタイプのメソッドを使用して遅い)ファイルを解析し、ODBCテキストドライバを使用してファイルを読み込むことを検討しましたが、誰にも他の(良い)提案はありますか?私は.NET/C#を使用しています。.NETを使用したテキストファイルの読み込みと解析のための代替手段

答えて

1

ファイルが比較的小さい場合は、Fileクラスを使用できます。

  • ReadAllBytes
  • ReadAllLines
  • ReadAllText
0

一度Fileクラスを使用してのすべてのファイルを読み込む場合は、ファイルの読み込み処理が遅くはないと:それはあなたを助けるかもしれない、これらのメソッドを持っていますJohnによって提案された方法。ファイルのサイズとそれらで何をしたいかによっては、多かれ少なかれメモリを使用することがあります。私はあなたFile.ReadAllText(またはあなたのために適切なもの)を試してみることをお勧めします

1

あなたの質問は少し曖昧です。テキストファイルにはランダムなテキスト行だけでなく、構造化されたデータが含まれていると仮定します。

ファイルを自分で解析している場合、.NETにはテキストファイルのすべての行を文字列(File.ReadAllLines)の配列に読み込むライブラリ関数があります。あなたのファイルがメモリを保持するのに十分な大きさであることが分かっているなら、この方法を使用して正規表現を使って配列を繰り返して&のフィールドを抽出することができます。

Excelファイルは異なるボールゲームです。 .XLSファイルはテキストではなくバイナリなので、サードパーティのライブラリを使用してアクセスする必要があります。 Excel 2007の.XLSXファイルには圧縮されたXMLデータが含まれているため、XMLを解凍してXMLパーサーを使用してデータを取得する必要があります。あなたが知的エクササイズの必要性を感じない限り、自分のXMLパーサを書くことはお勧めできません。

5

Excelファイルでは、カンマ/パイプ/タブ区切りのファイル(実際は別のテキストファイル)を意味するのではなく、実際にテキストとExcelのファイルパーサーを実行できるかどうかはわかりません。実際のExcelファイルを読むには、MS Officeライブラリを使用する必要があります。

区切られたテキストファイルの解析では、FileHelpers - オープンソースを調べることができます。それはあなたの速度要件にも一致するかどうかは分かりません。

+0

など、私はフィールドが引用符で囲まれているかどうかに対処する方法を気にせずにCSVファイルを処理することを可能にカンマが含まれている、引用符をエスケープ非常に使いやすい。 – NotMyself

+0

FileHelpers rocks – Mcbeev

+0

私はFileHelpersを使用しましたが、うまくいきましたが、非常に脆く、コンパイラ内部が変更されていない(ソースコード内のフィールドの順序によって動作する方法に依存します)。 http://stackoverflow.com/questions/15828/reading-excel-files-from-c/43451#43451も参照してください。個人的には、私はOPが示唆した答えを答えました。単純なケースにはかなり良いようです。 –

0

について読み取りXLSファイル:

は、Microsoft Office XP以上、あなたはすでにあなたが「ネイティブ」XLSファイルを読み取ることができ、.NET SDKオフィス図書館、ワード、パワーポイントなどを含めへのアクセス権を持っている持っている場合Office XPでは、インストール時に手動でチェックする必要があります(以前は.NETがインストールされていない限り)。

Microsoft Officeをお持ちでない場合、これらのライブラリを別のパッケージとして利用できるかどうかわかりません。

いくつかのあいまいな理由で、(オフィス12:-a.k.a Office 2007のから最新バージョンを含む)すべてのこれらのライブラリは、醜い依存関係が発生し、後方互換性はありませんが、使用する痛みあるCOMコンポーネントです。 I.E:Office XP(Office11)で動作するいくつかの方法があり、それをOffice 12の顧客にインストールすると、は変更されたインターフェイスがあるため、が機能しません。だからあなたはを2つのの "ライブラリ"とそれに対処する方法のセットを維持する必要があります。 Office 12ライブラリを使用してプログラムを作成し、顧客にOffice 11がある場合も同様です。ライブラリは機能しません。 :S

マイクロソフトがなぜこれらの醜いものの周りにMicrosoft.Office.XXXX管理ライブラリ(ラッパー)を作成したのか分かりません。

とにかく、あなたの質問は非常に奇妙です、ここでいくつかのアドバイスをお試しください。がんばろう!

私はLINQは、TXTファイル(パイプ区切りまたはCSV)

例えばを解析ではかなり有用であることが判明しました:(あなたが重要ではないと言う)Excelの一部を無視

3

これはhader行をスキップパイプ区切りファイルを読み込み、結果としてのIEnumerableを作成:

VARレコード= File.ReadAllLinesの行から (@ "C:\ blah.txt")。スキップ(1) let parts = line.Split( '|') パーツを選択します。

0

ODBCテキストドライバは、現在は古くなっています。これは、Unicodeをサポートしていません。あなたはすべての非ASCII文字を失うExcel 2007で UnicodeのCSVを開いて(というよりも、それをインポート)ので、もし

は驚くMS Excelはまだ、それを使用しています。

他の人が示唆しているように、.Netのファイル読み込み方法を使用することをお勧めします。私はジョンに同意

1

、例えば

: - 自分の質問に答える

using System.IO; 

... 

public class Program { 
    public static void Main() { 
    foreach(string s in File.ReadAllLines(@"c:\foo\bar\something.txt") { 
     // Do something with each line... 
    } 
    } 
} 
関連する問題