AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Zwei Zeilen miteinander Vergleichen (etwas kompliziert)

Zwei Zeilen miteinander Vergleichen (etwas kompliziert)

Ein Thema von DonPedroFo · begonnen am 9. Feb 2021 · letzter Beitrag vom 10. Feb 2021
Antwort Antwort
DonPedroFo

Registriert seit: 26. Jun 2019
18 Beiträge
 
#1

Zwei Zeilen miteinander Vergleichen (etwas kompliziert)

  Alt 9. Feb 2021, 09:08
Delphi-Version: 5
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.
  Mit Zitat antworten Zitat
Benutzerbild von Gausi
Gausi

Registriert seit: 17. Jul 2005
847 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Zwei Zeilen miteinander Vergleichen (etwas kompliziert)

  Alt 9. Feb 2021, 09:20
Als Denkansatz
Delphi-Quellcode:
for i := 1 to (Liste.Count Div 3) - 1 do
begin
  if Liste[0] = Liste[3*i] then ...
end;
The angels have the phone box.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.114 Beiträge
 
Delphi 12 Athens
 
#3

AW: Zwei Zeilen miteinander Vergleichen (etwas kompliziert)

  Alt 9. Feb 2021, 09:24
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 9. Feb 2021 um 09:26 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Moombas
Moombas

Registriert seit: 22. Mär 2017
Ort: bei Flensburg
525 Beiträge
 
FreePascal / Lazarus
 
#4

AW: Zwei Zeilen miteinander Vergleichen (etwas kompliziert)

  Alt 9. Feb 2021, 09:25
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.
Der Weg ist das Ziel aber man sollte auf dem Weg niemals das Ziel aus den Augen verlieren.
  Mit Zitat antworten Zitat
DonPedroFo

Registriert seit: 26. Jun 2019
18 Beiträge
 
#5

AW: Zwei Zeilen miteinander Vergleichen (etwas kompliziert)

  Alt 9. Feb 2021, 09:50
Wow, vielen Dank für die schnellen Vorschläge.
Genau so ein Gedankenblitz hat mir gefehlt.
Ich glaube jetzt sollte ich damit zurechtkommen.
  Mit Zitat antworten Zitat
DonPedroFo

Registriert seit: 26. Jun 2019
18 Beiträge
 
#6

AW: Zwei Zeilen miteinander Vergleichen (etwas kompliziert)

  Alt 9. Feb 2021, 13:22
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.

Geändert von DonPedroFo ( 9. Feb 2021 um 13:25 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.114 Beiträge
 
Delphi 12 Athens
 
#7

AW: Zwei Zeilen miteinander Vergleichen (etwas kompliziert)

  Alt 9. Feb 2021, 13:30
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 Copy(..., 0, ...);
Delphi/Pascal-Strings beginnen standardmäßig mit 1.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Moombas
Moombas

Registriert seit: 22. Mär 2017
Ort: bei Flensburg
525 Beiträge
 
FreePascal / Lazarus
 
#8

AW: Zwei Zeilen miteinander Vergleichen (etwas kompliziert)

  Alt 9. Feb 2021, 14:53
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;
Der Weg ist das Ziel aber man sollte auf dem Weg niemals das Ziel aus den Augen verlieren.
  Mit Zitat antworten Zitat
generic

Registriert seit: 24. Mär 2004
Ort: bei Hannover
2.415 Beiträge
 
Delphi XE5 Professional
 
#9

AW: Zwei Zeilen miteinander Vergleichen (etwas kompliziert)

  Alt 10. Feb 2021, 10:10
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.
Coding BOTT - Video Tutorials rund um das Programmieren - https://www.youtube.com/@codingbott
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:15 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