3257_de-DE
Vergleichen von Zeilen auf GleichheitIch habe 2 Datentabellen mit dem gleichen Spaltenformat, aber unterschiedlichen Anzahlen von Zeilen. Einige der Spaltentypen sind Zeichenfolgen und andere Ganzzahlen.
Ich möchte ein Skript schreiben, das table_1 eine Zeile nacheinander durchläuft, und sehen, ob es eine identische Zeile in table_2 gibt (basierend auf den Spaltenelementen in der Zeile).
Muss ich Gleichheitspaltenelement für Element vergleichen, oder gibt es eine schnelle Möglichkeit, die gesamte Zeile zu vergleichen? Wenn es einen Unterschied macht, muss ich nicht wissen, welche Zeile von table_2 gleich ist. Ich muss nur wissen, ob es eine Zeile mit gleichen Werten gibt.
Vielen Dank,
RechnungBetreff: Zeilenvergleich auf GleichheitUm zu vermeiden, dass Sie eine doppelte Schleife über alle Zeilen von Tabelle A und Tabelle B durchlaufen müssen, können Sie jeder Tabelle eine zusätzliche Spalte hinzufügen, die angibt, aus welcher Tabelle die Zeilen stammen (z. B. 'A' oder 'B'). Anschließend können Sie die beiden Tabellen zu einer einzigen Tabelle zusammenführen und diese nach einer oder zwei Spalten sortieren, die die größten Wertebereiche enthalten. Durchlaufen Sie dann die kombinierte Tabelle Zeile für Zeile und suchen Sie nach Übereinstimmungen zwischen jeder Zeile und so vielen Zeilen weiter vorn, wie in diesen ein oder zwei Spalten identische Werte enthalten. Wenn Sie eine Übereinstimmung finden und außerdem feststellen, dass die zusätzliche Spalte dieser Zeilen an einer Position ein 'A' und an der anderen ein 'B' enthält, vergleichen Sie (und erst dann) alle anderen Spalten ebenfalls, Element für Element. So benötigen Sie nur einen einzigen Durchlauf der Tabelle (plus einige zusätzliche Vergleiche, falls Sie mehrere nahezu identische Zeilen finden), anstatt den gesamten Vorgang mit einer doppelten Schleife durchführen zu müssen.
Wenn es eine Möglichkeit gibt , eine ganze Zeile zweier Tabellen in einer einzigen Anweisung zu vergleichen, kenne ich sie nicht, aber zumindest sollte die obige Vorgehensweise die Sache etwas beschleunigen, wenn man mit relativ großen Tabellen arbeitet.Betreff: Zeilenvergleich auf GleichheitDanke David.
Du hast mich auf eine ähnliche Idee gebracht. Für eine Tabelle habe ich für jede Zeile einen String erstellt, der alle Elemente der Zeile enthält. Diesen String habe ich dann in eine Liste eingefügt. Analog dazu habe ich für jede Zeile der zweiten Tabelle einen String erstellt und geprüft, ob er in der Liste enthalten ist.
dtOld = Data Table( "oldDelta" );
dtNew = Data Table( "Delta" );
nr = N Zeilen( dtOld );
nc = N Cols( dtOld );
oldList = {};
Für ( j = 1, j <= nr, j++,
oldString = "";
Für ( k = 1, k <= nc, k++,
oldString = oldString || Char( Column( dtOld, k ) )
);
Einfügen in( alteListe, alteZeichenkette );
);
nr = N Zeilen( dtNew );
Für ( j = 1, j <= nr, j++,
newString = "";
Für ( k = 1, k <= nc, k++,
newString = newString || Char( Column( dtNew, k ) )
);
Wenn( Enthält( alteListe, neueZeichenkette ),
Print( j )
);
);
Nachricht bearbeitet von: Bill EBetreff: Zeilenvergleich auf GleichheitSie könnten auch versuchen, die beiden Tabellen zu einer neuen Tabelle zu verknüpfen. Die „where“-Klausel lautet dann:
col1A = col1B
und col2A = col2B
und col3A = col3B
usw.
Die resultierende Tabelle enthielte die Duplikate. Bei einer großen Anzahl von Spalten ist das allerdings recht mühsam.