Re: Zeilen mit Kombinationen vergleichen ??? | |
|
Autor: Manfred X |
Datum: 06.03.14 19:06 |
|
Nur sehr grob getestet ....
Voraussetzung: Jede Zahl erscheint pro Zeile nur einmal
Ich verstehe aber nicht ganz, was genau weg geschrieben werden soll.
Hier wird die jeweils 2. Zeile, die identisch (5 Zahlen) mit einer
davor ist, geschrieben.
Wenn Du nur jeweils 5 Zahlen bei Gleichheit notierst,
gibt es im Output keine Verbindung zu den zugrundeliegenden Zeilen
im Input und die Zahlen-Reihen können sich mehrfach wiederholen.
Was ist der Sinn der Sache??
Option Explicit
Private Sub Form_Load()
Dim file As String
file = "C:\daten\input.txt"
Dim lines() As String
lines = GetLines(file)
Dim erledigt() As Boolean
ReDim erledigt(UBound(lines))
'Doppelschleife über die Zeilen
Dim i As Integer, k As Integer
Dim line1() As Integer, line2() As Integer
For i = 1 To UBound(lines)
line1 = GetLine(lines(i))
If Not erledigt(i) Then
For k = i + 1 To UBound(lines)
If Not erledigt(k) Then
line2 = GetLine(lines(k))
erledigt(k) = CompareLines(line1, line2)
End If
Next k
End If
Next i
'Zeilen schreiben
k = FreeFile
Open "C:\daten\output.txt" For Output As #k
For i = 1 To UBound(lines)
If erledigt(i) Then
Write #k, lines(i)
End If
Next i
Close #k
End Sub
Private Function CountLines(ByVal file As String) As Integer
'Zahl der Zeilen in der Datei
Dim k As Integer, z As Integer, line As String
k = FreeFile
Open file For Input As #k
While Not EOF(k)
Line Input #1, line
z = z + 1
Wend
Close #k
CountLines = z
End Function
Private Function GetLines(ByVal file As String) As String()
'Zeilen in ein Array eintragen
Dim l As Integer
l = CountLines(file)
Dim lines() As String
ReDim lines(l) As String
Dim k As Integer, z As Integer
k = FreeFile
Open file For Input As #k
z = 1
While Not EOF(k)
Line Input #1, lines(z)
z = z + 1
Wend
Close #k
GetLines = lines
End Function
Private Function GetLine(line As String) As Integer()
'ZeilenString in ein Integer-Array eintragen
Dim parts() As String
parts = Split(line, ",")
Dim ints() As Integer
ReDim ints(UBound(parts)) As Integer
Dim i As Integer
For i = 0 To UBound(parts)
ints(i) = CInt(parts(i))
Next i
GetLine = ints
End Function
Private Function CompareLines(line1() As Integer, _
line2() As Integer) As Boolean
'Werte in zwei Zeilen vergleichen / Anzahl Übereinstimmungen
Dim i As Integer, k As Integer, id As Integer
For i = 0 To UBound(line1)
For k = 0 To UBound(line2)
If line1(i) = line2(k) Then id = id + 1
Next k
Next i
CompareLines = id > 4
End Function
Beitrag wurde zuletzt am 06.03.14 um 19:18:29 editiert. |
|