Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Zwei Zeilen miteinander Vergleichen (etwas kompliziert) (https://www.delphipraxis.net/206919-zwei-zeilen-miteinander-vergleichen-etwas-kompliziert.html)

DonPedroFo 9. Feb 2021 09:08

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.

Gausi 9. Feb 2021 09:20

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;

himitsu 9. Feb 2021 09:24

AW: Zwei Zeilen miteinander Vergleichen (etwas kompliziert)
 
Also wirklich alles mit 0?
Falls doch jeden mit Nachfolgern, dann
Delphi-Quellcode:
for i := 0 to (Liste.Count div 3) - 1 do
  if Liste[i * 3 + x] = Liste[(i + 1) * 3 + x] then ...
Und X=0 für 0. Zeile, X=1 für 1. Zeile usw.

Moombas 9. Feb 2021 09:25

AW: Zwei Zeilen miteinander Vergleichen (etwas kompliziert)
 
Zitat:

Zitat von DonPedroFo (Beitrag 1482561)
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.

Moin,
vom Prinzip bist du richtig. Schau mal hier: https://www.delphipraxis.net/59474-s...eite-step.html
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.

DonPedroFo 9. Feb 2021 09:50

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.

DonPedroFo 9. Feb 2021 13:22

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.

himitsu 9. Feb 2021 13:30

AW: Zwei Zeilen miteinander Vergleichen (etwas kompliziert)
 
Delphi-Quellcode:
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
Und
Delphi-Quellcode:
Copy(..., 0, ...);

Delphi/Pascal-Strings beginnen standardmäßig mit 1.

Moombas 9. Feb 2021 14:53

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;

generic 10. Feb 2021 10:10

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 01:08 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz