2017-09-19 17 views
0

こんにちは皆さん天才!readline/writelineでの奇妙な結果

私は、txtファイルを読み込み、そのファイル内の単語「PART」で始まるすべての行を取り出し、新しいファイルに配置するコードを作成しようとしました。

どういうわけか、元のファイルの2行目ごとに出力ファイルが欠落しています。 は、これは私のコードです:

{ 
    string line =""; 
    string Starttext = "PART"; 
    using (System.IO.StreamReader reader = new System.IO.StreamReader(@"C:\Users\tsnm2171\Desktop\processed\LABB\ORIGINAL.txt"))   
    using (System.IO.StreamWriter writer = new System.IO.StreamWriter(@"C:\Users\tsnm2171\Desktop\processed\LABB\OUTPUT.txt")) 


     while (reader.ReadLine() != null)     

     { line = reader.ReadLine(); 

      if (line.StartsWith(Starttext)) 
       { 
        //writes/starts a new line beginning with PART 

        writer.WriteLine(line); 
       } 
       else 

       { 
        //appends info to same line (beginning with a space) 
        writer.Write(" " + line); 
       }      
     } 
}   

元のファイルは次のようになります。

KABEL   RXF 4x25 
PART  01  1 1  
PART  02  2 2  
PART  03  3 3  
PART  04  4 4  
PART  SH  GND GND  
KABEL   RXF 4x35 0000000456 Cable RXF 4x35 
PART  01 1 5 5  
PART  02 1 6 6  
PART  03 1 7 7  
PART  04 1 8 8  
PART  SH 1 GND GND  
KABEL   RXF 4x35 0000000456 Cable RXF 4x35 
PART  01 1 9 9  
PART  02 1 10 10  
PART  03 1 11 11  
PART  04 1 12 12  
PART  SH 1 GND GND 

しかし、出力ファイルは、以下のように行と「パート04」「02パート」がありません:

PART  01  1 1  
PART  03  3 3  
PART  SH  GND GND  
PART  01 1 5 5  
PART  03 1 7 7  
PART  SH 1 GND GND  
PART  01 1 9 9  
PART  03 1 11 11  
PART  SH 1 GND GND 

なぜですか?

+4

ある

あなたwhileループ内で二回reader.ReadLine()と呼ばれています。ほとんどの場合、 'while((line = reader.ReadLine())!= null)'が必要であり、後続の呼び出しを削除します。 –

+0

私はそれを試みます。 ReadLineは、それが呼び出されるときにいつも次の行を読みますか? 何とか前に行の値を呼び出すことはできますか?前の行を読むためにreadline(-1)のようなものがありますか? –

+0

"ReadLineは、それが呼び出されるときに常に次の行を読みますか?そうです、それはそれが意味することです。そして、いいえ、覚えておいてもらえません...以前の電話の結果を保持したい場合は、自分で行う必要があります。 –

答えて

4

reader.ReadLine()は実際にファイルから1行を読み取り、次の行にカーソルを移動します。

あなたは正しい方法は、あなたがすべての `WriteLine`コールのために二度` ReadLine`を呼んでいる

while ((line = reader.ReadLine()) != null) 
{ 
    // Do your work 
}