AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

String mit einer Datei abgleichen

Ein Thema von lucy · begonnen am 5. Nov 2022 · letzter Beitrag vom 7. Nov 2022
Antwort Antwort
Seite 2 von 3     12 3      
lucy

Registriert seit: 25. Okt 2017
67 Beiträge
 
Delphi XE7 Starter
 
#11

AW: String mit einer Datei abgleichen

  Alt 6. Nov 2022, 10:30
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] = '100then 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;

Geändert von lucy ( 6. Nov 2022 um 10:33 Uhr)
  Mit Zitat antworten Zitat
IMPEGA

Registriert seit: 19. Jan 2008
Ort: Brhv
83 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#12

AW: String mit einer Datei abgleichen

  Alt 6. Nov 2022, 10:31
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.
  Mit Zitat antworten Zitat
lucy

Registriert seit: 25. Okt 2017
67 Beiträge
 
Delphi XE7 Starter
 
#13

AW: String mit einer Datei abgleichen

  Alt 6. Nov 2022, 10:53
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
Miniaturansicht angehängter Grafiken
list.jpg  
  Mit Zitat antworten Zitat
zeras

Registriert seit: 11. Mär 2007
Ort: Saalkreis
1.633 Beiträge
 
Delphi 12 Athens
 
#14

AW: String mit einer Datei abgleichen

  Alt 6. Nov 2022, 11:10
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.
Matthias
Es ist nie falsch das Richtige zu tun!
- Mark Twain
  Mit Zitat antworten Zitat
ringli

Registriert seit: 7. Okt 2004
509 Beiträge
 
Delphi 11 Alexandria
 
#15

AW: String mit einer Datei abgleichen

  Alt 6. Nov 2022, 11:20
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.
  Mit Zitat antworten Zitat
Benutzerbild von juergen
juergen

Registriert seit: 10. Jan 2005
Ort: Bönen
1.174 Beiträge
 
Delphi 11 Alexandria
 
#16

AW: String mit einer Datei abgleichen

  Alt 6. Nov 2022, 11:53
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;
Jürgen
Indes sie forschten, röntgten, filmten, funkten, entstand von selbst die köstlichste Erfindung: der Umweg als die kürzeste Verbindung zwischen zwei Punkten. (Erich Kästner)
  Mit Zitat antworten Zitat
lucy

Registriert seit: 25. Okt 2017
67 Beiträge
 
Delphi XE7 Starter
 
#17

AW: String mit einer Datei abgleichen

  Alt 6. Nov 2022, 12:04
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")
  Mit Zitat antworten Zitat
lucy

Registriert seit: 25. Okt 2017
67 Beiträge
 
Delphi XE7 Starter
 
#18

AW: String mit einer Datei abgleichen

  Alt 6. Nov 2022, 12:14
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.
  Mit Zitat antworten Zitat
Benutzerbild von blawen
blawen

Registriert seit: 1. Dez 2003
Ort: Luterbach (CH)
677 Beiträge
 
Delphi 12 Athens
 
#19

AW: String mit einer Datei abgleichen

  Alt 6. Nov 2022, 14:07
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;
Roland
  Mit Zitat antworten Zitat
lucy

Registriert seit: 25. Okt 2017
67 Beiträge
 
Delphi XE7 Starter
 
#20

AW: String mit einer Datei abgleichen

  Alt 6. Nov 2022, 14:13
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.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 13:39 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