2017-09-19 4 views
0

Hallo ihr alle Genies!Seltsames Ergebnis mit readline/writeline

Ich habe versucht, einen Code zu erstellen, der eine TXT-Datei liest und jede Zeile beginnend mit dem Wort "PART" in dieser Datei nimmt und in eine neue Datei legt.

Irgendwie fehlt die Ausgabedatei jede zweite Zeile aus der ursprünglichen Datei. Dies ist mein Code:

{ 
    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); 
       }      
     } 
}   

Die Originaldatei sieht wie folgt aus:

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 

Aber die Ausgabedatei wird die Linien "Part 02" und "Part 04", wie unten fehlt:

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 

Warum?

+4

Du nennst 'ReadLine' zweimal für jeden' ​​WriteLine' Anruf. Sie wollen fast sicher 'while ((line = reader.ReadLine())! = Null)' und den folgenden Aufruf entfernen. –

+0

Ich werde das versuchen. Liest ReadLine immer die nächste Zeile, zu der es aufgerufen wird? Kann ich irgendwie den Wert in der Zeile vorlesen ... wie zB readline (-1) oder etwas ähnliches, um die Zeile vorher zu lesen? –

+0

"Liest ReadLine immer die nächste Zeile, zu der es aufgerufen wird?" Nun ja - das ist es, was es tun soll. Und nein, du kannst nicht darum bitten, dich zu erinnern ... wenn du das Ergebnis des vorherigen Anrufs behalten willst, musst du das selbst tun. –

Antwort

4

reader.ReadLine() liest tatsächlich eine Zeile aus der Datei und bewegt den Cursor zur nächsten Zeile.

Sie reader.ReadLine() zweimal in Ihrer while Schleife

der richtige Weg, genannt haben, ist

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