Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.167 Beiträge
 
Delphi 12 Athens
 
#11

Re: im FileStream bestimmte Zeichen ersetzen

  Alt 4. Jun 2009, 10:57
nja, jedes Zeichen einzeln an den Temp-String anzuhängen ist nicht grad optimal
(da wird z.B. jedesmal der komplette alte Temp-String, zusammen mit dem neuen Zeichen, in einen neuen Temp-String umkopiert)

du kannst die Daten auch direkt im String ersetzen

Delphi-Quellcode:
function FileToStringErsetze(const FileName: String; zuErsetzendeZeichen, NeueZeichen: AnsiChar): AnsiString;
var fs: TFileStream;
begin
  fs := TFileStream.Create(FileName, fmOpenRead or fmShareDenyWrite);
  try
    SetLength(Result, fs.Size);
    if fs.Size > 0 then fs.ReadBuffer(Result[1], Length(Result));
    for i := 1 to Length(Result) do
      if Result[i] = zuErsetzendeZeichen then Result[i] := NeueZeichen;
  finally
    fs.Free;
  end;
end;

s := FileToStringErsetze(opendialog1.filename, #00, '|');


falls dich noch andere Zeichen stören, so könnte man z.B. gleich alle Steuerzeichen (unterhalb des Leertaste) ersetzen ... abgesehn von Zeilenumbruch und Tabulator
Delphi-Quellcode:
function FileToStringErsetze(const FileName: String; NeueZeichen: AnsiChar): AnsiString;
var fs: TFileStream;
begin
  fs := TFileStream.Create(FileName, fmOpenRead or fmShareDenyWrite);
  try
    SetLength(Result, fs.Size);
    if fs.Size > 0 then
      fs.ReadBuffer(Result[1], Length(Result));
    for i := 1 to Length(Result) do
      if Result[i] in [#0..#8, #11, #12, #14..#31] then
        Result[i] := NeueZeichen;
  finally
    fs.Free;
  end;
end;

s := FileToStringErsetze(opendialog1.filename, '|');
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat