Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Stringreplace aus Textinhalt (https://www.delphipraxis.net/207249-stringreplace-aus-textinhalt.html)

julchen 7. Mär 2021 09:39

Stringreplace aus Textinhalt
 
Hallo,

ich möchte eine fehlerhafte Liste korrigieren.
Dazu habe ich eine Delphi-Software, in der nur ich alle Änderungen am Inhalt der Liste vornehmen kann. Damit auch andere Änderungen vornehmen können, dachte ich, ich lagere den Text in eine Datei aus.

Code:
procedure TForm1.Button1Click(Sender: TObject);
var
  slist: TStringlist;
  liste: String;
  i: integer;
  begin
  slist := TStringlist.create;
  liste := 'liste.txt';
  slist.LoadFromFile(liste);
  for i := 0 to slist.Count -1 do
  begin
    slist.Strings[i] := StringReplace(slist.Text , liste , [rfReplaceAll]);
  end;
  slist.SaveToFile(liste);
  slist.Free;
end;
Die Liste:
Code:
'Mustermann;Max;München','Mustermann;Max;Hamburg'
Das Funktioniert aber nicht.
Fehlermeldung: Keine überladene Version von StringReplace.

Kann mir jemand Helfen?
VG, Julia

Poelser 7. Mär 2021 10:03

AW: Stringreplace aus Textinhalt
 
Ich hab hier gerade kein Delphi, aber du brauchst für StringReplace 4 Parameter: was soll ersetzt werden, womit soll ersetzt werden, worin soll ersetzt werden und eben die Flags - du hast nur 3 Parameter.

haentschman 7. Mär 2021 10:04

AW: Stringreplace aus Textinhalt
 
Moin...8-)

http://docwiki.embarcadero.com/Libra....StringReplace

Zitat:

StringReplace(const S, OldPattern, NewPattern: string; Flags: TReplaceFlags): string;
Zitat:

StringReplace(slist.Text , liste , [rfReplaceAll]);
...fällt dir was auf? :zwinker:

PS: Ressourcen Schutzblöcke sind enorm wichtig! :warn:
Zitat:

Die Anweisung try...finally

In manchen Situationen muss sichergestellt sein, dass bestimmte Operationen auch bei Auftreten einer Exception vollständig abgeschlossen werden. Wenn beispielsweise in einer Routine eine Ressource zugewiesen wird, ist es sehr wichtig, dass sie unabhängig von der Beendigung der Routine wieder freigegeben wird. In diesen Fällen können try...finally-Anweisungen verwendet werden.

Das folgende Beispiel zeigt, wie eine Datei auch dann wieder geschlossen werden kann, wenn beim Öffnen oder Bearbeiten eine Exception auftritt:

Reset(F);
try
... // Datei F verarbeiten
finally
CloseFile(F);
end;

himitsu 7. Mär 2021 10:30

AW: Stringreplace aus Textinhalt
 
Es geht auch mit 3 oder 2 :stupid:
Delphi-Referenz durchsuchenStringReplace
Delphi-Referenz durchsuchenReplaceStr / Delphi-Referenz durchsuchenReplaceText
Delphi-Referenz durchsuchenTStringHelper.Replace

(nur nicht wenn man die ReplaceFlags verwenden will)


Aber insgesamt ergibt es irgendwie keinen wirklichen Sinn.
-> Die Liste in sich selbst ersetzen, mit ihrem eigenem Dateinamen.

Und zusätzlich der relative Pfad zur Datei. (sowas macht man nicht, außer die Anwendung soll Suizidgedanken bekommen)

julchen 7. Mär 2021 11:41

AW: Stringreplace aus Textinhalt
 
Zitat:

Zitat von himitsu (Beitrag 1484571)
Es geht auch mit 3 oder 2 :stupid:

Aber insgesamt ergibt es keinen Sinn.
-> Die Liste in sich selbst ersetzen, mit ihrem eigenem Dateinamen.

Ich habe das mit zwei Dateien hinbekommen. Läuft durch und funktioniert. Aber Du hast recht:
Mit zwei Dateien zu arbeiten bringt so nichts und wäre zu fehleranfällig.
Jetzt muss ich mir was anderes überlegen.

Code:
procedure TForm1.Button1Click(Sender: TObject);
var
  slist: TStringlist;
  liste_alt: String;
  liste_neu: String;
  i: integer;
  begin
  slist := TStringlist.create;
  liste_alt := 'c:\users\Julia\documents\embarcadero\studio\projekte\stringreplace\win32\debug\liste_alt.txt';
  liste_neu := 'c:\users\Julia\documents\embarcadero\studio\projekte\stringreplace\win32\debug\liste_neu.txt';
  slist.LoadFromFile(liste_alt);
  for i := 0 to slist.Count -1 do
  begin
    slist.text := StringReplace(slist.Text , liste_alt , liste_neu , [rfReplaceAll]);
  end;
  slist.SaveToFile(liste_neu);
  slist.Free;
end;
Hintergrund:

In der Firma arbeiten die meisten im Homeoffice.
Andere an Standorten.

Die Liste, die ich zum Weiterverarbeiten bekomme, enthält Fehler, wo der Mitarbeiter gerade arbeitet.
Dazu kommen spontane Wechsel zwischen Homeoffice und Standort.
Dazu kommen noch andere Daten, die weiterverarbeitet werden müssen, aber die sind Konstant.

Ich weise erst mal jedem Mitarbeiter das Homeoffice (ca. 95%) zu und mit StringReplace
ändere ich dann von Homeoffice/Stadt oder Stadt/Homeoffice.

Das funktioniert auch soweit, nur muss ich halt das Programm bei Änderungen neu Kompilieren.
Bin ich krank oder im Urlaub, greifen die Kolleginnen wieder zu Ausdrucken und Excel-Dateien
(So, wie sie es gelernt haben und können), um die Daten abzugleichen.
(Wie langsam doch so ein Tag vergeht :-(

Deswegen wollte ich eine Liste mit Namen und Standorten aus dem Programm auslagern.
Man ändert schnell den Standort und der Rest wird wie sonst weiterverarbeitet. Fertig.
Das Program steht. Denn der Arbeitsaufwand, ob ich die Stadt in Delphi oder im Text ändere, ist gleich.
Ich spare mir halt das Kompilieren und die Kolleginnen brauchen mich nicht unbedingt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:03 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