2016-07-01 4 views
0

Ich habe ein ähnliches Problem wie StreamReader ReadLine returns null when not EOF, die ich nicht herausfinden kann. Der Code ist nicht kompliziert, so ich denke, wenn es wirklich nötig ist:streamreader readline gibt nichts zurück, wenn nicht eof

Dim myFile As StreamReader 

If Not myFile.EndOfStream Then 
    'Ignore header 
    myFile.ReadLine()  
    Dim line As Integer = 0 
    Do Until myFile.EndOfStream 
     line += 1 
     Dim currentLine = myFile.ReadLine() 
     'At the point line = 4 currentLine is Nothing - why?? 
     processLine(currentLine) 
    Loop 
End If 

Ich kann Ihnen garantieren, dass die Datei viele mehr Zeilen enthält, die 4 und keine Zeile leer ist. Die Datei ist eine Bar ('|') mit Trennzeichen versehene Textdatei (* .txt) mit 250 Spalten darin und wie die Datei erstellt wird, stelle mir diese Frage nicht. Alles, was ich sagen kann, hatte ich bis vor kurzem noch nie ein Problem mit dieser problematischen Datei, also wie kann ich feststellen, was das Problem ist. Ich habe die Datei in NotePad ++ geöffnet und alles scheint in Ordnung zu sein. Die Konsequenz, dass die Datei korrupt ist, wenn ich richtig liege, ist, dass das Programm eine Ausnahme auslöst, da die Prozessfunktionen davon ausgehen, dass es nicht leer ist oder wenn ich leere Zeilen ignoriere, so dass mein Code in eine Endlosschleife geht.

Außerdem beachte ich, dass ich tatsächlich versuche, Legacy-Code (classic asp) zu bearbeiten, also muss ich es zurück in Vbscript übersetzen, wenn ich fertig bin, die ein TextStream-Objekt verwendet, das dem Code ähnlich ist, den ich nicht will um es zu kompliziert zu machen, also keine schicken .NET-Framework-Aufrufe. Ich benutzte .NET, um es zu debuggen.

+0

Der Code, den Sie haben und das Problem, das Sie nichts bekommen haben mit klassischen zu tun ASP, Punkt. Wenn Sie es in Zukunft in einen klassischen ASP konvertieren möchten, geben Sie eine neue Frage ein. Das Tag hier ist ** ungültig **./cc @Lankymart –

Antwort

0

StreamReader.Peek kehrt -1 auf EOF, nicht 0, so vernünftig es ist für Sie Nothing anstatt Verlassen der Schleife zu bekommen, wenn EOF erreicht ist.

Wenn Sie einen Dateinamen haben, ist es wahrscheinlich einfacher, dies zu tun mit System.IO.File.ReadLines, und das wird auch das Peek Problem lösen:

For Each line In File.ReadLines(filePath).Skip(1) 
    processLine(line) 
Next 
+0

Welche Version von .NET, wie ich 4.5 verwende Ich sehe diese Methode nicht – Glen

+0

@Glen: Ich habe das 'File' Bit vergessen, sorry. – Ryan

+0

@Glen: VBScript ist so komplett anders als VB.NET, dass es wahrscheinlich nicht wert ist, Fragen zu ersteren zu stellen, die Beispiele mit letzterem verwenden. Wie wäre es, diesen Teil zu ignorieren und zu prüfen, ob dies funktioniert, um zu sehen, ob das, was Sie erwarten, dass die Datei enthält und was es tatsächlich enthält, übereinstimmt? – Ryan

Verwandte Themen