Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   String mit einer Datei abgleichen (https://www.delphipraxis.net/211814-string-mit-einer-datei-abgleichen.html)

lucy 6. Nov 2022 09:30

AW: String mit einer Datei abgleichen
 
vielleicht habe ich sonst noch was falsch gesetzt?

Delphi-Quellcode:
procedure TForm1.EingangTimer(Sender: TObject);
var
  msg, s, s2, s3: String;
       sl, List : TStrings;
              i : integer;
begin
 if IdTcpClient1.Connected then
  begin
   msg := IdTCPClient1.IOHandler.ReadLn('', 5);
    if msg <> '' then
     begin
      zaehler := zaehler +1;
      sl := TStringList.Create;
      sl.delimiter := ':';
      sl.DelimitedText := msg;
      if sl.Strings[0] = '100' then begin

       end else begin
       if sl.Strings[5] = '' then
        begin
        sl.Strings[5] := 'kein Text';
        end else
         begin
          sl.Strings[5] := 'mit Text';
         end;
        s := sl.Strings[0] + ' | ' + sl.Strings[1] + ' | ' + sl.Strings[2] + ' | ' + sl.Strings[3] + ' | ' + sl.Strings[4] + ' | ' + Format('%.6d',[zaehler]) + ' | ' + trim(sl.Strings[5]);
       Memo1.Lines.Insert(0, 'Log | ' + datetostr(date) + ' | ' + timetostr(time) + ' | ' + ' IdTCPClient1 | ' + s);
      Statusbar1.SimpleText := 'Log | IdTCPClient1 | ' + s;
    if FileExists( ExtractFilePath( ParamStr( 0 ) ) + '\List.dat' ) then
   begin
    s2 := sl.Strings[3];
    ShowMessage(s2);
     List := TStringList.Create;
      try
       List.LoadFromFile( ExtractFilePath( ParamStr( 0 ) ) + '\List.dat' );
      for i := 0 to List.Count - 1 do
       begin
        s3 := StringReplace( List.Strings[i], ',', '', [rfReplaceAll] );
        ShowMessage(s3);
         if s2 = s3 then
          begin
           Shape1.Brush.Color := clgreen;
           Reset_Netz_Id.Enabled := true;
          end else
         begin
        Query_Monitord.Refresh;
       Shape1.Brush.Color := cllime;
      Reset_Alarm.Enabled := true;
     end;
      break;
       end;
        finally
       List.Free;
     end;
    end;
   end;
  end;
 end;
end;

IMPEGA 6. Nov 2022 09:31

AW: String mit einer Datei abgleichen
 
Nur mal so eine Idee.
Kann sein, dass du gar keine Zeilenumbrüche in deiner Datei hast, dein Editor fügt sie in deiner Vorschau automatisch ein, doch in Wirklichkeit deine Datei aus einer Zeile besteht?
Schau dir im debug einfach die Zeilen von Liste an.

lucy 6. Nov 2022 09:53

AW: String mit einer Datei abgleichen
 
Liste der Anhänge anzeigen (Anzahl: 1)
nochmal zum Verstädnis!

hier die aktuelle List: siehe Bild!

s2 ist = "12345"

Delphi-Quellcode:
   s3 := StringReplace( List.Strings[i], ',', '', [rfReplaceAll] );
        ShowMessage(s3);
ist = ShowMessage(s3) = "12345 6789"

soll = ShowMessage(s3) ist falsch! es müsste "12345" heißen

zeras 6. Nov 2022 10:10

AW: String mit einer Datei abgleichen
 
Deine Daten sind laut Screenshot mittels Komma getrennt und nicht jeder Wert auf einer Zeile.
Kannst du deine Vergleichsdaten nicht ändern, so dass in jeder Zeile nur ein Wert steht?
Das wurde weiter oben auch schon angemerkt.

ringli 6. Nov 2022 10:20

AW: String mit einer Datei abgleichen
 
Ersetze
Delphi-Quellcode:
s3 := StringReplace( List.Strings[i], ',', '', [rfReplaceAll] );
doch mal durch
Delphi-Quellcode:
s3 := StringReplace( List.Strings[i], ',', sLineBreak, [rfReplaceAll] );
Wie sieht es jetzt aus?

Delphi-Quellcode:
if s2 = s3 then
würde ich auch noch durch
Delphi-Quellcode:
if Trim(s2) = Trim(s3) then
ersetzen um bei dem Vergleich mögliche Leerzeichen zu ignorieren.

juergen 6. Nov 2022 10:53

AW: String mit einer Datei abgleichen
 
Ich bin jetzt etwas verwirrt. Im Post #1 und #7 hast du Zahlen untereinander stehen.
Jetzt im Post #13 auf einmal nebeneinander. Ich deute das Ergebnis aus Showmessage nun so, dass die Zahlen kommagetrennt nebeneinander in den Zeilen stehen.
Dann könnte man das so umsetzen.

Delphi-Quellcode:
VAR
  s, s2: STRING;
  List: TStringList;
  i, i2: Integer;
  arr: TArray<STRING>;
BEGIN
  IF FileExists( ExtractFilePath( ParamStr( 0 ) ) + '\List.dat' ) THEN
  BEGIN
    List := TStringList.Create;
    TRY
      List.LoadFromFile( ExtractFilePath( ParamStr( 0 ) ) + '\List.dat' );
      s := sl.Strings[0];
      FOR i := 0 TO List.Count - 1 DO
      BEGIN
        arr := { uses System.StrUtils } SplitString( List.Strings[i], ',' );
        FOR i2 := 0 TO HIGH( arr ) DO
        BEGIN
          s2 := ( arr[i2] );
          IF s = s2 THEN
          BEGIN
            ShowMessage( 'OK' );
            break;
          END;
        END;
      END;
    FINALLY
      List.Free;
    END;
  END;
END;

lucy 6. Nov 2022 11:04

AW: String mit einer Datei abgleichen
 
Delphi-Quellcode:
Ersetze s3 := StringReplace( List.Strings[i], ',', '', [rfReplaceAll] ); doch mal durch s3 := StringReplace( List.Strings[i], ',', sLineBreak, [rfReplaceAll] ); Wie sieht es jetzt aus?

if s2 = s3 then würde ich auch noch durch if Trim(s2) = Trim(s3) then ersetzen um bei dem Vergleich mögliche Leerzeichen zu ignorieren.
jetzt werden die Zahlen im ShowMessage(s3) aus der Liste untereinandergeschrieben (aber alle Zahlen) das möchte ich auch nicht.

ich habe eine Liste:

12345,
67891,
98765,
32165

wenn jetzt zum Beispiel : s2 = "67891" ist, soll in der Liste geprüft werden ob diese Zahl vorhanden ist?

ja die Zahl : "67891" ist vorhanden! (ShowMessage (s3) = "67891")

lucy 6. Nov 2022 11:14

AW: String mit einer Datei abgleichen
 
Zitat:

Ich bin jetzt etwas verwirrt. Im Post #1 und #7 hast du Zahlen untereinander stehen.
Jetzt im Post #13 auf einmal nebeneinander. Ich deute das Ergebnis aus Showmessage nun so, dass die Zahlen kommagetrennt nebeneinander in den Zeilen stehen.
Dann könnte man das so umsetzen.
ich habe immer beide Varianten getestet! ist natürlich verwirrend :-(

die Liste sollte eigentlich so aussehen:

12345,
67891,
98756,
32656,
usw.

blawen 6. Nov 2022 13:07

AW: String mit einer Datei abgleichen
 
Wenn ich es richtig verstanden habe, suchst Du in der Liste einen einmaligen und daher eindeutigen String.
Wieso benutzt Du nicht .find oder .IndexOf?

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  Liste    : TStringList;
  Index    : Integer;
  bGefunden : Boolean;
begin
  Liste := TStringList.Create;
  try
    if OpenDialog1.Execute
    then begin
      Liste.LoadFromFile(OpenDialog1.FileName);
    end;

    // Findet den Eintrag nur mit dem Trennzeichen
    Label1.Caption := 'Der Suchstring ist in der Zeile: ' + IntToStr(Liste.IndexOf(Edit1.Text));

    // Findet den Eintrag nur mit dem Trennzeichen
    bGefunden := Liste.Find(edit1.text,Index);
    if bGefunden
      then Label2.Caption := 'Der Suchstring ist in der Zeile: ' + IntToStr(Index)
      else Label2.Caption := 'Nicht gefunden';

    // Meldet das erste gefundene Resultat
    // Findet auch Einträge, wenn das Trennzeichen nicht vorkommt
    // -> auch Teilstringe werden gefunden ('ab' -> 'abc,')
    // Allerdings musst Du hier mit einer Schleife arbeiten um sämtliche Einträge zu finden
    Liste.Find(edit1.text,Index);
    Label3.Caption := 'Der Suchstring ist in der Zeile: ' + IntToStr(Index);

  finally
    Liste.Free;
  end;
end;

lucy 6. Nov 2022 13:13

AW: String mit einer Datei abgleichen
 
Zitat:

Wenn ich es richtig verstanden habe, suchst Du in der Liste einen einmaligen und daher eindeutigen String.
Ja!

Schaue mir gleich mal Deinen Quelltext an.


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:45 Uhr.
Seite 2 von 3     12 3      

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