![]() |
Delphi-Version: 5
Zwei Zeilen miteinander Vergleichen (etwas kompliziert)
Hallo,
folgende Frage: ich habe eine Auswertung eines Prüfsystems, die Datei leite ich als .txt Datei aus. in der Kurzfassung schaut das so aus Zeile0: Wert 1 Zeile1: ... Zeile2: "Leer" Zeile3: Wert 2 Zeile4: ... Zeile5: "Leer" Zeile6: Wert 3 Zeile7: ... Zeile8: "Leer" . . . Jetzt will ich die Zeile0 im Gesamten Dokument mit jeder dritten Zeile vergleichen ob der selbe Wert drin steht oder nicht. Analog die Zeile 3 mit jeder dritten Zeile vergleichen ob der selbe Wert drin steht oder nicht. usw. Zur Info ich benutze Delphi 5 Meine Proammierkenntnisse sind nicht 0 aber ein Profi bin ich auch nicht (sonst würde ich ja hier nicht fragen). Auf die Lösung würde ich gerne selber kommen aber mir fehlt gerade der richtige Gedanke. Ist das mit einer "einfachen" FOR-Schleife und IF-Anweisung realisierbar oder begebe ich mich da auf den Holzweg. Ich komm nicht weiter, da ich nur jede dritte Zeile anfassen will, sonst bekomme ich das Problem das irgendwann die Zeile 2 und die Zeile 5 gleich sind weil ja nichts drin steht. bzw. Zeile 2 und Zeile 8 usw. Für einen kleinen Tipp wäre ich sehr Dankbar. |
AW: Zwei Zeilen miteinander Vergleichen (etwas kompliziert)
Als Denkansatz
Delphi-Quellcode:
for i := 1 to (Liste.Count Div 3) - 1 do
begin if Liste[0] = Liste[3*i] then ... end; |
AW: Zwei Zeilen miteinander Vergleichen (etwas kompliziert)
Also wirklich alles mit 0?
Falls doch jeden mit Nachfolgern, dann
Delphi-Quellcode:
Und X=0 für 0. Zeile, X=1 für 1. Zeile usw.
for i := 0 to (Liste.Count div 3) - 1 do
if Liste[i * 3 + x] = Liste[(i + 1) * 3 + x] then ... |
AW: Zwei Zeilen miteinander Vergleichen (etwas kompliziert)
Zitat:
vom Prinzip bist du richtig. Schau mal hier: ![]() Es gibt ja keine Step Anweisung, die kannst du dir aber mit einer for-Schleife und einer bzw. Zwei if (mit mod) Abfragen zusammenbasteln. Brauchst dann auch ggf. nur 1 Schleife für beide Prüfungen. |
AW: Zwei Zeilen miteinander Vergleichen (etwas kompliziert)
Wow, vielen Dank für die schnellen Vorschläge.
Genau so ein Gedankenblitz hat mir gefehlt. Ich glaube jetzt sollte ich damit zurechtkommen. |
AW: Zwei Zeilen miteinander Vergleichen (etwas kompliziert)
Also soweit so gut, das Prinzip funktioniert
hier mal ein Teil stück
Code:
for x := 0 to (iCount div 3) -1 do
begin PosA := POS('[',sla.Strings[(x)*3]); sZeileA := copy(sla.Strings[(x)*3],0,(PosA-1)); for i := x to (iCount div 3) -1 do begin PosB := POS('[',sla.Strings[(i+1)*3]); sZeileB:= copy(sla.Strings[(i+1)*3],0,(PosB-1)); if sZeileA = sZeileB then vari := (i+1)*3; begin sCopyA := sla.Strings[vari]; slB.add(sCopyA); sCopyB := sla.Strings[vari+1]; slb.add(sCopyB); sCopyC := sla.Strings[vari+2]; slb.add(sCopyC); end; end; end; Was schon mal funktioniert ist, das ich jede Zeile mit jeder Zeile vergleichen kann. Allerdings kommt auch folgender "Fehler" vor. z.B Zeile0: Wert1... ... Zeile10: Wert1.... ... Zeile28: Wert1.... Jetzt wird in meinen durchläufen erstmal die Zeile 0 mit anderen Zeilen verglichen was soweit gut funktioniert, und am Ende werden mir die anderen zwei Zeilen als Ergebnis gespeichert. Aber nach ein paar durchläufen wird auch der Wert der Zeile10 mit dem Wert der Zeile28 verglichen, da das Ergebnis natürlich stimmt, wird mir das auch als Ergebnis gespeichert was an sich ja richtig ist, aber ich habe ja schon davor verglichen das die Zeile0 = Zeile10 = Zeile28 ist, somit wird mir alles irgendwann doppelt und dreifach angezeigt. usw. ich hoffe ihr könnt mir folgen. |
AW: Zwei Zeilen miteinander Vergleichen (etwas kompliziert)
Delphi-Quellcode:
Und
SL.Duplicates := dupIgnore; // eventuell muß auch SL.Sorted auf True sein
SL.Add('AAA'); SL.Add('AAA'); SL.Add('AAA'); // AAA ist nur einmal drin
Delphi-Quellcode:
Copy(..., 0, ...);
Delphi/Pascal-Strings beginnen standardmäßig mit 1. |
AW: Zwei Zeilen miteinander Vergleichen (etwas kompliziert)
Ich hatte das ein wenig anders im Kopf bei meinem Hinweis aber in der Regel gibt es ja viele Wege nach Rom^^
Ungetestet aber das Prinzip müsste passen:
Delphi-Quellcode:
for x := 3 to iCount -1 do //Zeile 0 - 2 brauchen nicht durchlaufen zu werden, daher mit
begin if x mod 3 = 0 then // Wenn durch 3 ohne Rest teilbar, etwas tun. Sonst einfach weiter. Nachteil: Jede Zeile wird abgelaufen begin if sla.Strings[x] = sla.Strings[0] then begin //Vergleich mit Wert aus Zeile 0, wenn gleich, tue etwas end else if (sla.Strings[x] = sla.Strings[3]) and (x <> 3) then begin //Vergleich mit Wert aus Zeile 3, wenn gleich, tue etwas aber nur wenn es nicht auch Zeile 3 ist end; end; end; |
AW: Zwei Zeilen miteinander Vergleichen (etwas kompliziert)
Wenn diese Log-Datei zu groß wird, kann es zum Problem werden, die Datei in eine Stringliste zu laden.
Daher würde ich einen Zeilenzähler empfehlen und immer nur eine Zeile aus der Datei lesen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:28 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz