2016-04-18 4 views
0

Ich habe eine Datei mit Trennzeichen und muss die letzte Zeile entfernen, wenn sie doppelt erscheint.Überprüfen Sie, ob die Textdatei die zusätzliche Leerzeile hat oder nicht (System nicht genügend Speicher)

enter image description here

fileLines = IO.File.ReadAllLines(fileDirectory) 
    extraBlankLine = fileLines(fileLines.Length - 1) 

Wenn es zurückgeben „nichts“, dann weiß ich es eine zusätzliche Leerzeile ist, dann wird es die letzte Zeile aus der Datei zu entfernen.

Manchmal bekomme ich den "System nicht genügend Speicher" -Fehler aufgrund der Dateigröße (bis zu 2 GB).

Gibt es andere Möglichkeiten zu überprüfen, ob die Datei die doppelten Leerzeilen am Ende hat oder nicht?

+1

Machst du noch etwas an der Datei, während du es liest? Wenn nicht, können Sie wahrscheinlich nur die letzten 4 Bytes suchen und lesen, und wenn sie CR, LF, CR, LF sind (vorausgesetzt Windows-Zeilenenden), haben Sie eine zusätzliche leere Zeile am Ende der Datei (vorausgesetzt, dass "leer Zeile "ist eigentlich leer und keine Leerzeichen). Sie könnten dann ['FileStream.SetLength'] (https://msdn.microsoft.com/en-us/library/system.io.filestream.setlength.aspx) verwenden, um die letzten zwei Bytes zu entfernen. Sollte viel schneller als das Lesen aller 2 GB sein. – Mark

Antwort

1

Lesen Sie jede Zeile einzeln und verfolgen Sie die aktuellen und vorherigen Zeilen. Wenn Sie an das Ende der Datei gelangen, überprüfen Sie deren Werte.

Dim reader = File.OpenText(fileDirectory) 
Dim line as String = "" 
Din line2 as String = "" 
Dim line3 as String = "" 

Do 
    line3 = line2 
    line2 = line 
    line = reader.ReadLine 
Loop Until line Is Nothing 

reader.Close() 

If String.IsNullOrEmpty(line2) And String.IsNullOrEmpty(line3) Then 
    ' Do what you need to do 
End If 
Verwandte Themen