Hallo!
Falls ich das halbwegs richtig verstanden habe, ist Schrittweite
eine ungeeignete Bezeichnung. Gewöhnlich bezeichnet der Begriff das
Überspringen von z.B. Zeilen (in einer Schleife). Es soll aber jede
Zeile zur Prüfzeile werden ....????
Ungetestet!!!
Die Funktion "CheckLines5" enthält zusätzliche Parameter:
BedingungGleich: BOOL, der festlegt, ob alle Prüfspalten
in den Zeilen gleich oder ungleich sein müssen, damit es
zur Ausgfabe in die Datei kommt
AnzahlZeilenVorher, AnzahlZeilenNachher:
Integer: Anzahl der Zeilen, die vor bzw. nach der Prüfzeile
ggf. mit ausgegeben werden. (Positive Werte!)
Hinweis: Die Prüfzeile wird nur mit EINER Zeile davor
verglichen. Der Parameter "AnzahlZeilenVorher" bezieht sich
nur auf den Umfang der Datei-Ausgabe, nicht auf den Vergleich
der Prüfspalten.
Private Function CheckLines5(ByVal infile As String, ByVal outfile As String, _
ByVal BedingungGleich As Boolean, _
ByVal AnzahlZeilenVorher As Integer, _
ByVal AnzahlZeilenNachher As Integer, _
ByRef PrüfSpalten() As Integer) As Boolean
On Error GoTo fehler
Dim lines() As String, ak%, i%, k%, fieldsv$(), fieldsp$()
If Not ReadLines(infile, lines) Then CheckLines5 = False: Exit Function
Dim cz As Integer
If BedingungGleich Then
'Ausgabebedingung: alle Prüfspalten gleich
cz = 0
Else
'Ausgabebedingung: alle Prüfspalten ungleich
cz = UBound(PrüfSpalten) - LBound(PrüfSpalten) + 1
End If
Dim written() As Boolean
ReDim written(UBound(lines)) As Boolean
ak = FreeFile
Open outfile For Output As #ak
For i = 1 To UBound(lines)
fieldsv = Split(lines(i - 1), ",")
fieldsp = Split(lines(i), ",")
If CheckConditions(fieldsv(), fieldsp(), PrüfSpalten()) = cz Then
'Zeilen vorher
For k = i - AnzahlZeilenVorher To i - 1
If k >= 0 Then
If Not written(k) Then
Print #ak, lines(k)
written(k) = True
End If
End If
Next k
'Prüfzeile
If Not written(i) Then
Print #ak, lines(i)
written(i) = True
End If
'Zeilen nachher
For k = 1 To AnzahlZeilenNachher
If i + k <= UBound(lines) Then
If Not written(i + k) Then
Print #ak, lines(i + k)
written(i + k) = True
End If
End If
Next k
End If
Next i
Close #ak
CheckLines5 = True
Exit Function
fehler:
Close #ak
CheckLines5 = False
End Function |