Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi StringReplace funktioniert nicht (https://www.delphipraxis.net/160889-stringreplace-funktioniert-nicht.html)

Destroyer446 6. Jun 2011 15:20

StringReplace funktioniert nicht
 
Hi!
Ich wollte einen "Ersetzer" für mehrere Dateien schreiben und habe es dann versucht, die Dateien einzeln in eine TStringList einzulesen und mit StringReplace zu ersetzen.
Aber er ersetzt nicht...
Hoffe um Hilfe hier mein Code:
Delphi-Quellcode:
EDatei := TStringList.Create;
 For i := 0 to ListFilesPath.Count-1 do
 begin
  EDatei.LoadFromFile(ListFilesPath.Strings[i]);
  If EDatei.Count >= 1 then
  begin
   For i2 := 0 to EDatei.Count-1 do EDatei.Strings[i2] := StringReplace(EDatei.Strings[i2], Suchen, Ersetzen, [rfReplaceAll, rfIgnoreCase]);
  end;
  EDatei.SaveToFile(ListFilesPath.Strings[i]);
  ShowMessage('Datei1("'+ListFiles.Items.Strings[i]+'") Ersetzt.');
 end;
 EDatei.Free;
ListFiles ist die ListBox die angezeigt wird mit den Dateinamen und ListFilesPath ist eine TStringList mit den in gleicher Reihenfolge angeordneten Pfaden.
Ist daran etwas Falsch?

Danke!

DeddyH 6. Jun 2011 15:27

AW: StringReplace funktioniert nicht
 
Werden denn auch alle Zeilen durchlaufen? Bist Du einmal durchgesteppt, um das zu überprüfen?

p80286 6. Jun 2011 15:32

AW: StringReplace funktioniert nicht
 
Auf den ersten Blick scheint alles in Ordnung.
was sagt denn der Debugger?

Gruß
K-H

b1zZ 6. Jun 2011 16:06

AW: StringReplace funktioniert nicht
 
Delphi-Quellcode:
EDatei := TStringList.Create;
For i := 0 to ListFilesPath.Count-1 do
begin
  EDatei.LoadFromFile(ListFilesPath.Strings[i]);
  If EDatei.Count >= 1 then
  begin
    EDatei.Text := StringReplace(EDatei.Text, Suchen, Ersetzen, [rfReplaceAll, rfIgnoreCase]);
    ShowMessage(EDatei.Text); // StringReplace funktioniert?
  end;
  EDatei.SaveToFile(ListFilesPath.Strings[i]);
  ShowMessage('Datei1("'+ListFiles.Items.Strings[i]+'") Ersetzt.');
end;
EDatei.Free;
Hi,
kannst du mal diesen ganz leicht abgeänderten Code nehmen und schauen, ob StringReplace funktioniert hat. Ich habe EDatei.Text verwendet, da du dir das Zeilenweise durchlaufen sparen kannst. Ich hatte vor geraumer Zeit ein ähnliches Problem, bei mir kam der Fehler beim Speichern auf, da die Datei exclusiv geöffnet war.

himitsu 6. Jun 2011 19:41

AW: StringReplace funktioniert nicht
 
Man mag es nicht glauben, aber das einzelzeilenweise Durchlaufen ist eventuell sogar schneller und verbraucht weniger RAM (ist vorallem bei großen Dateien praktisch), aber da LoadFromFile/SaveToFile nicht optimal arbeiten, ist die Speicherersparnis nur bedingt vorhanden.

Was steht denn in "Suchen" und "Ersetzen" drin? Sind da eventuell Zeilenumgrüche (#13 und/oder #10) enthalten?

Ist "Suchen" wirklich in den Dateien enthalten? (richtig geschrieben und so)
Delphi-Quellcode:
If EDatei.Count >= 1 then
begin
  if not AnsiContainsText(EDatei.Text, Suchen) then
    ShowMessage('nee, is nich: ' + ListFilesPath[i]);
  ...
und da du ja keine Delphi-Version angegeben hast (im Post oder Profil )
Delphi-Quellcode:
If EDatei.Count >= 1 then
begin
  if Pos(AnsiUpperCase(Suchen), AnsiUpperCase(EDatei.Text)) = 0 then
    ShowMessage('nee, is nich: ' + ListFilesPath[i]);
  ...

DeddyH 7. Jun 2011 07:08

AW: StringReplace funktioniert nicht
 
Nebenbei bemerkt ist die Abfrage
Zitat:

Delphi-Quellcode:
If EDatei.Count >= 1 then

völlig überflüssig, da die anschließende Schleife bei leerer Liste sowieso nicht durchlaufen wird.


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