2011-07-16 26 views
3

テキストファイルから行単位で読み込み中です。テキストファイルの行を読み込み行をスキップする

StreamReader reader = new StreamReader(OpenFileDialog.OpenFile()); 

// Now I am passing this stream to backgroundworker 
backgroundWorker1.DoWork += ((senderr,ee)=> 
{ 
    while ((reader.ReadLine()) != null) 
    { 
     string proxy = reader.ReadLine().Split(':').GetValue(0).ToString(); 
     // here I am performing lengthy algo on each proxy (Takes 10 sec,s) 
    } 
}); 
backgroundWorker1.RunWorkerAsync(); 

ここで問題となるのは、一部の行が読み取られないということです。 1行読み込み後、各行をスキップします。

私はそれはラインの正確な数を与える

File.ReadAllLines(file.FileName).Length 

を使用して行の合計数を読みました。

私のコードでBackgroundWorkerメカニズムに何らかの問題があると思われますが、それを把握することはできません。

答えて

10

を、あなたがそれ(その中に読み込まれますラインなど、何にでも結果を代入していないがコール)はスキップされます。

のいくつかのバリエーション試してください:あなたが好むかもしれない

string line = reader.ReadLine(); 
while (line != null) 
{ 
    /* Lengthy algorithm */ 
    line = reader.ReadLine(); 
} 

を:whileループreader.ReadLine(で

string line; 
while ((line = r.ReadLine()) != null) {} 
5

readline()呼び出しで変数に行を代入しているように見えません。長いアルゴリズムで次の行を読んでいますか?

更新プログラムに基づいて、これは間違いなく問題です。

あなたがこの持っている:あなたは、代わりにこの必要があります

... 
while ((reader.ReadLine()) != null) 
{ 
    string proxy = reader.ReadLine().Split(':').GetValue(0).ToString(); 
    ... 
}); 

while ((reader.ReadLine()) != null)

... 
string line; 
while ((line = reader.ReadLine()) != null) 
{ 
    string proxy = line.Split(':').GetValue(0).ToString(); 
    ... 
}); 
+0

私は質問 –

+0

更新はしばらく句内の文字列を宣言することが可能です! –

+0

@ Zain:私はあなたが正しいと思います。私はforeachループをほとんどの時間使用するので、習慣の力。 Jon SkeetのLineReaderクラスを使用しているので、通常は次のようになります。foreach(var Line in new LineReader(fileName)){}; –

1

)の行を読み込み、文字列プロキシで次回で= reader.ReadLine ().Split( ':')。GetValue(0).ToString(); reader.ReadLine()は次の行を読み込みます。 whileループを変数に割り当てていません。 whileループで読み込まれた文字列(Line)に対して分割操作を実行する必要があります。

関連する問題