Einzelnen Beitrag anzeigen

ichbins

Registriert seit: 9. Jul 2005
Ort: Hohenaltheim
1.001 Beiträge
 
Delphi 2005 Personal
 
#5

Re: Stringreplace einmal auslösen für alle Umlaute?

  Alt 3. Mär 2006, 14:33
Bei einer 700MB großen Textfile solltest du dich aber auch fragen ob das Zeug überhaupt in den RAM passt - selbst bei 2 GB könntest du Probleme bekommen.

Ich würde das in einer Datei-Kopier-Funktion lösen:
Delphi-Quellcode:
var
  f,g:file of byte;
  i:integer;
  readbuf:array[1..4096] of byte;
  readbytes:integer;
  writebuf:array[1..8192] of byte;
  writebytes,writebufpos:integer;
begin
  assignfile(f,filename);
  assignfile(g,writefilename);
  reset(f);
  rewrite(g);
  while not eof(f) do begin
    blockread(f,readbuf,length(readbuf),readbytes);
    writebytes:=readbytes*2;
    writebufpos:=low(writebuf)-2;
    for i:=low(readbuf) to high(readbuf) do begin
      writebufpos:=writebufpos+2;
      case readbytes[i] of
        'ä': begin
               writebuf[writebufpos]:='A';
               writebuf[writebufpos+1]:='E';
             end;
        'ö': begin
         
        [...]

        'ß': begin
               writebuf[writebufpos]:='S';
               writebuf[writebufpos+1]:='S';
             end;

      end else
      begin
        writebuf[writebufpos]:=readbuf[readbufpos];
        writebufpos:=writebufpos-1;
        writebytes:=writebytes-1;
      end;
    end;
    blockwrite(g,writebuf,writebytes);
  end;
  closefile(f);
  closefile(g);
end;
Michael Enßlin
Ich, der ich weiß, mir einzubilden, dass ich weiß, nichts zu wissen, weiß, dass ich nichts weiß.
Sokrates
  Mit Zitat antworten Zitat