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
Benutzerbild von blawen
blawen

Registriert seit: 30. Nov 2003
Ort: Luterbach (CH)
696 Beiträge
 
Delphi 12 Athens
 
#1

AW: String mit einer Datei abgleichen

  Alt 5. Nov 2022, 16:41
ach ja mein Problem richtig in der Datei wird nur die erste Zeile gelesen.
brauche eine Schleife um alle Zeilen zu lesen.

wie könnte so eine Schleife aussehen?
Kommen die Werte auch Mehrfach vor?

Grundsätzlich sollte Dir
List.find('Suchstring', Index) weiterhelfen.
Zitat:
function Find(const S: string; var Index: Integer): Boolean; virtual;

Sucht in einer sortierten Liste den Index eines Strings und gibt an, ob bereits ein String mit diesem Wert vorhanden ist.
Roland
  Mit Zitat antworten Zitat
lucy

Registriert seit: 25. Okt 2017
84 Beiträge
 
Delphi XE7 Starter
 
#2

AW: String mit einer Datei abgleichen

  Alt 5. Nov 2022, 18:24
Zitat:
Kommen die Werte auch Mehrfach vor?
nein, die Werte sind einmalig in der Datei.

bin noch am experimentieren

habe noch keine Lösung, dass ist auch falsch, glaube ich

Delphi-Quellcode:
     List:= TStringList.Create;
       List.LoadFromFile(ExtractFilePath(ParamStr( 0 )) + '\List.dat');
        for i := 0 to List.Count - 1 do begin
         if Index = List.IndexOf(sl.Strings[0]) then begin
  Mit Zitat antworten Zitat
Benutzerbild von juergen
juergen

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

AW: String mit einer Datei abgleichen

  Alt 5. Nov 2022, 21:45
Der Code sollte doch funktionieren. Daher vermute ich, dass in der List.dat-Datei ein Komma ist und in sl.Strings[0] nicht?

Probiere mal folgendes.
Delphi-Quellcode:
  
VAR
  s, s2: STRING;
  List: TStringList;
  i: Integer;
BEGIN
IF FileExists( ExtractFilePath( ParamStr( 0 ) ) + '\List.dat' ) THEN
  BEGIN
    s := sl.Strings[0];
    ShowMessage( s );
    List := TStringList.Create;
    TRY
      List.LoadFromFile( ExtractFilePath( ParamStr( 0 ) ) + '\List.dat' );
      FOR i := 0 TO List.Count - 1 DO
      BEGIN
        s2 := StringReplace( List.Strings[i], ',', '', [rfReplaceAll] );
        ShowMessage( s2 );
        IF s = s2 THEN
        BEGIN
          // hier das was du machen willst
          break;
        END;
      END;
    FINALLY
      List.Free;
    END;
  END;
END;
Aber eigentlich sollte das alles beim debuggen ersichtlich sein.
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)

Geändert von juergen ( 5. Nov 2022 um 21:50 Uhr)
  Mit Zitat antworten Zitat
lucy

Registriert seit: 25. Okt 2017
84 Beiträge
 
Delphi XE7 Starter
 
#4

AW: String mit einer Datei abgleichen

  Alt 6. Nov 2022, 08:50
die Zahlen stehen untereinander, es wird immer nur die erste Zeile gelesen warum????
Angehängte Grafiken
Dateityp: jpg List.JPG (12,6 KB, 18x aufgerufen)
  Mit Zitat antworten Zitat
zeras

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

AW: String mit einer Datei abgleichen

  Alt 6. Nov 2022, 08:53
Das Komma gehört auch zum String. Ist das vielleicht dein Problem?
Matthias
Es ist nie falsch das Richtige zu tun!
- Mark Twain
  Mit Zitat antworten Zitat
Benutzerbild von juergen
juergen

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

AW: String mit einer Datei abgleichen

  Alt 6. Nov 2022, 09:05
Da ich das Komma als Problem vermutet hatte, hatte ich StringReplace() vorgeschlagen.
Wenn du meinen Code anwendest:
Wie oft erscheint die Showmessage mit s2 ?
Und was genau steht eigentlich in s?
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)

Geändert von juergen ( 6. Nov 2022 um 09:08 Uhr)
  Mit Zitat antworten Zitat
lucy

Registriert seit: 25. Okt 2017
84 Beiträge
 
Delphi XE7 Starter
 
#7

AW: String mit einer Datei abgleichen

  Alt 6. Nov 2022, 09:26
Zitat:
Da ich das Komma als Problem vermutet hatte, hatte ich StringReplace() vorgeschlagen.
Wenn du meinen Code anwendest:
Wie oft erscheint die Showmessage mit s2 ?
Und was genau steht eigentlich in s?
zu (1) habe beide Varianten mit und ohne [,] ausprobiert

zu (2) Showmessage s2 wird einmal angezeigt

zu (3) es wird immer nur eine Zahl angezeigt zum Beispiel : 1234

habe das Gefühl, als würde aus der Datei immer nur die erste Zeile gelesen
  Mit Zitat antworten Zitat
lucy

Registriert seit: 25. Okt 2017
84 Beiträge
 
Delphi XE7 Starter
 
#8

AW: String mit einer Datei abgleichen

  Alt 6. Nov 2022, 09: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 09:33 Uhr)
  Mit Zitat antworten Zitat
IMPEGA

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

AW: String mit einer Datei abgleichen

  Alt 6. Nov 2022, 09: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
84 Beiträge
 
Delphi XE7 Starter
 
#10

AW: String mit einer Datei abgleichen

  Alt 6. Nov 2022, 09: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
Angehängte Grafiken
Dateityp: jpg List.JPG (12,5 KB, 20x aufgerufen)
  Mit Zitat antworten Zitat
Antwort Antwort


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 08:30 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