![]() |
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:
ListFiles ist die ListBox die angezeigt wird mit den Dateinamen und ListFilesPath ist eine TStringList mit den in gleicher Reihenfolge angeordneten Pfaden.
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; Ist daran etwas Falsch? Danke! |
AW: StringReplace funktioniert nicht
Werden denn auch alle Zeilen durchlaufen? Bist Du einmal durchgesteppt, um das zu überprüfen?
|
AW: StringReplace funktioniert nicht
Auf den ersten Blick scheint alles in Ordnung.
was sagt denn der Debugger? Gruß K-H |
AW: StringReplace funktioniert nicht
Delphi-Quellcode:
Hi,
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; 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. |
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:
und da du ja keine Delphi-Version angegeben hast (im Post oder
If EDatei.Count >= 1 then
begin if not AnsiContainsText(EDatei.Text, Suchen) then ShowMessage('nee, is nich: ' + ListFilesPath[i]); ... ![]()
Delphi-Quellcode:
If EDatei.Count >= 1 then
begin if Pos(AnsiUpperCase(Suchen), AnsiUpperCase(EDatei.Text)) = 0 then ShowMessage('nee, is nich: ' + ListFilesPath[i]); ... |
AW: StringReplace funktioniert nicht
Nebenbei bemerkt ist die Abfrage
Zitat:
|
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