2016-12-23 4 views
-4

Streamreader(またはStreamreader以外のもの)を使用して特定のテキストブロックを読み取ることはできますか?たとえば、日付の区切られたテキストファイルにグラフのようなデータがあり、毎日のデータを個別に読みたいとします。データの例を以下に示します。特定のテキストブロックを読むことが可能です

enter image description here

  • ブルー - 日付
  • レッド - 私は一日あたりの引きたいデータの第二のチャンクは(数字のみが必要 - 私は
  • グリーン日当たり引きたいデータの最初のチャンク

私はこれを行う方法を検索すると、テキストファイル全体を読むか、または個人の行を読むことしか見つけられないようです。 2番目のオプションは実現可能なように思えるかもしれませんが、私は毎日同じ量のエントリを持っていないので、読み込む行数を動的に決定する必要があります。最高の方法は、私のStreamreaderに、 "FAIL"と "Total"のような2つの単語の間のすべてのテキストを読むように指示することだと思っています。しかし、私はオンラインで何かを見つけることができないので、私はそれが可能かどうか、それがあれば、それをやり遂げる方法についてはわからない。どんな助けもありがとうございます。

私はファイルからテキストをExcelに取り込む予定ですので、おそらく出力を配列などに入れておく必要がありますが、それは後で問題になります。

+3

一般的なライブラリメソッドは、行ではなく、これをどのように判断するのですか?行を解析し、読み込みを継続するか停止するかを決定するコードを記述する必要があります。 –

+0

@CodyGrayはすべての行を見て、その行のテキストに基づいて何を保存したいのかを決定すると言っていますか? – BlueBarren

+0

はい、それはそれを行う方法になります。 –

答えて

1

それはあなたがそれを自分で行うだろうか書き留めるような単純なことができます。
このようなもの:

  • 日付が表示されるまで行を読む。日付を覚えています。
  • 行が赤くなるまで行を読むブロックヘッダー。
  • 行が緑色のブロックヘッダーになるまで読み取ります。赤いブロックデータに行を追加しませんでした。
  • EOFまで、または日付が来るまで、行を読み込みます。グリーンブロックデータにラインを追加していませんでした。
  • EOFが見つからない場合、繰り返します。

各ステップの実行方法は優先事項です。しかし、それを分解することによって、一見複雑な問題がずっと簡単になります。

0

これは、解析と呼ばれ、独自のパーサを書く必要が

はい。

見た目では、非常に簡単です。

あなたレッドグリーンのセクションでは、データを取得することができますSubString各列を意味し、幅を固定するように見えます。

あなたは何を読んでいるのかを判断するためのコードを書いています。通常は、以前に解析していたセクションを知る必要があります。あなたの行は、あなたがプロセスの始めにいることを知るために、行(トリムを必要とする可能性がある)が日付に解析されているかどうかを確認するのと同じくらい簡単です。そこから、StartsWithREFという行になるまで、あなたの要約にあることを知っている時に、あなたの次の行は空白文字が数文字になるまでレコードになることを知ることができます。

0

このファイルを読むには、正規表現を使用する必要があります。各行を順に読みます。各行で、この行が新しい項目を開始するかどうかを決定します。赤いフィールドまたは緑色のフィールドのデータが含まれています。これらの行のそれぞれを正規表現にマッチさせ、グループを使用して実際のデータを抽出することができます。

MSDN about regular expressions

+0

どういうわけか私はOPが何かを知っているとは思っていませんし、正規表現は用意されていません。 – MickyD

+0

@MickyD OPは経験不足かもしれませんが、正規表現なしでこれをしようとすると、それはちょうどストリングで回るのが醜いからです。 –

+0

@MickyD私は実際に正規表現が何であり、何を使用しているかを知っています。しかし、私とあなたの否定性や風刺を満たすために、そして/または私の質問にはそれほど良くはありません。 – BlueBarren

関連する問題