2016-12-15 5 views
-3

私はテキストファイルを持っています。このテキスト内の特定の文字列の後の各行を読み込み、各行を変数に格納します。指定された文字列の後にファイル内の行を読み込み、各行を変数に格納します。

テキストは、この形式になっています。

[15-06-1999] 
Brian 
John 
186 

[26-08-2000] 
//... 

私は空白行に[15-06-1999]の下から読んで3列の別々の変数でを保存するにはどうすればよいですか?

効率的なの方法はまだありません。

私はC#でこれをしようとしています。

+4

'効率的な方法が見つかりませんでした。あなたの*非効率的な方法はどこですか?あなたがそれを掲示すれば*よりエフェクトな*回答を投稿しようとすることができます。この形式では、私はこのコードを書いているだけです* –

+1

魔法の方法はありません。行を読み、必要な行をスキップして、必要なすべての行があれば停止します。人々はそれほどエレガントなコードを提案できないかもしれませんが、それの肉は同じです – pm100

+0

@ pm100何か魔法のようなものがあるかもしれません。たとえば、ファイルからの文字位置を格納する配列です。だから、ファイルストリームは、そのポジションを探してそこから読み始める必要があります。どのようにこれがファイルを一度読み込む必要があるか、またはこのガイドを保持する別の小さなファイルがあります –

答えて

1
var path = "path to your text file"; 
string[] lines = File.ReadAllLines(path); 
int lineNumber = 0; 
for(int i = 0; i < lines.Length; i++) 
{ 
    if(lines[i] == "[15-06-1999]") 
    { 
     lineNumber = i; 
     break; 
    } 
} 

for(int i = lineNumber + 1; i < lines.Length; i++) 
{ 
    // These lines are after the line with [15-06-1999] do whatever you want here 
} 

あなたがトップでこれを置くことによって、名前空間をインポートしていることを確認してください:ここでusing System.IO;

は、それらがファイル全体を読み込むのではなく、要求されるラインを読みます別の方法(良い)です。 pm100からの提案に感謝します。 (?:あなたは本当に働い1を持っているんBTW)..しかし、少なくとも、この作品...私はあなたの方法を知らないので、私は、これはより効率的であると言うことはできません

var path = "path to your text file"; 
IEnumerable<string> lines = File.ReadLines(path); 
bool lineFound = false; 
foreach(var thisLine in lines) 
{ 
    if(lineFound) 
    { 
     // These lines are after the line with [15-06-1999] do whatever you want here 
    } 
    else if(thisLine == "[15-06-1999]") 
    { 
     lineFound = true; 
    } 
} 
+1

file.readlinesが良いです、それはストリームをストリームし、最初の50で作業する必要がある場合はファイル – pm100

+0

@ pm100ありがとう。答えを編集しました。 – CodingYoshi

2

var date = "[15-06-1999]"; 
var lines = File.ReadLines(filename) 
      .SkipWhile(line => line != date) 
      .Skip(1) //skip date 
      .TakeWhile(line => !string.IsNullOrEmpty(line)) 
      .ToList(); 
+0

+1、私の疑惑は、ファイル内のすべての行クラスタに対してOPを繰り返す必要があるということです。つまり、日付行とn行の後に空白行 – pm100

関連する問題