Hallo!
So wie Du Dein Problem beschrieben hast, wird JEDE
Zeile (ab der 2.) sukzessive zu der Prüfzeile (=zeilep).
Das bedeutet, es ist möglich, dass bestimmte Zeilen mehrfach
ausgegeben werden.
Das Lesen aus der Datei erfolgt sequentiell zeilenweise
von vorne nach hinten.
Bevor jeweils die nächste Zeile (= nächste Prüfzeile) gelesen wird,
muss die aktuelle Prüfzeile zu der Zeile davor werden (zeilev),
(die dann mit der danach gelesenen "zeilep" verglichen wird.)
Gleichzeitig ist diese neu gelesene "zeilep" noch die Folgezeile
für den vorherigen Vergleich, die - falls Bedingung erfüllt -
geschrieben werden soll.
Das entspricht dem Ablauf, den Du gepostet hast:
http://www.vbarchiv.net/forum/id2_i137638t137636_zeile-darueber-zeile-selbst-zeile-darunter.html
Deutlicher wird es, wenn Du eine Leerzeile zwischen die ausgegebenen
Zeilenblöcke setzt.
Hier im Code eine zusätzliche "print"-Anweisung einfügen:
If towrite Then
'Zeile danach schreiben (falls bedingung erfüllt und Zeile vorhanden)
Print #ak, zeilep
Print #ak, ""
End If Ist die Datei nicht zu groß, kann man alle Zeilen lesen und
in einer Schleife durchlaufen:
Private Function CheckLines2(ByVal infile As String, ByVal outfile As String, _
ByVal PrüfSpalte As Integer) As Boolean
On Error GoTo fehler
Dim lines() As String, ak%, i%, k%, fieldsv$(), fieldsp$()
'Zeilen lesen
If Not ReadLines(infile, lines) Then CheckLines2 = False: Exit Function
ak = FreeFile
Open outfile For Output As #ak
For i = 1 To UBound(lines)
fieldsv = Split(lines(i - 1), ",")
fieldsp = Split(lines(i), ",")
If CInt(Trim(fieldsv(PrüfSpalte))) <> _
CInt(Trim(fieldsp(PrüfSpalte))) Then
Print #ak, lines(i - 1)
Print #ak, lines(i)
If i < UBound(lines) Then
Print #ak, lines(i + 1)
Print #ak, ""
End If
End If
Next i
Close #ak
CheckLines2 = True
Exit Function
fehler:
Close #ak
CheckLines2 = False
End Function
Private Function ReadLines _
(ByVal infile As String, ByRef lines() As String) As Boolean
On Error GoTo fehler
ReDim lines(100)
Dim z As Integer: z = -1
Dim ik As Integer
ik = FreeFile
Open infile For Input As #ik
While Not EOF(ik)
z = z + 1
If UBound(lines) < z Then
ReDim Preserve lines(z + 100)
End If
Line Input #ik, lines(z)
Wend
ReDim Preserve lines(z)
Close #ik
ReadLines = True
Exit Function
fehler:
ReadLines = False
End Function MfG
Manfred
Beitrag wurde zuletzt am 23.05.11 um 15:42:40 editiert. |