Otra cosa.
Recuerda que ReadLn lee una linea hasta que se encuentra un fin de linea.
Si este es muy grande pueda que no te quepa dentro de los limites de un String.
Por eso te sugiero que lo hagas con buffer.
Hay varios ejemplo de leer un fichero con buffer. Y vas procesando cada caracter.
Este puede ser un ejemplo
Código Delphi
[-]
procedure TForm1.Cargar(Source, Destination: string);
var FromF, ToF: file of byte;
Buffer: array[0..4096] of char;
NumRead: integer;
FileLength: longint;
begin AssignFile(FromF, Source);
reset(FromF);
AssignFile(ToF, Destination);
rewrite(ToF);
FileLength := FileSize(FromF);
with Progressbar1 do begin Min := 0;
Max := FileLength;
while FileLength > 0 do begin BlockRead(FromF, Buffer[0], SizeOf(Buffer), NumRead);
FileLength := FileLength - NumRead;
..
..
BlockWrite(ToF, Buffer[0], NumRead);
Position := Position + NumRead;
end;
CloseFile(FromF);
CloseFile(ToF);
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin Cargar('c:\fileoriginal.txt', 'c:\nuevofile.txt');
end;
Espero te sirva, si tiene error, perdona, pero es que lo he hecho con un ejemplo de una copia de ficheros, pero puede servirte cualquier cosa dispara que estamos aqui.
saludos
Editado: Recuerda en la condicion decirle que si el caracter es #13 o #10 que no lo reemplazca, ya que son los caracteres de salto de linea.

Hat un progressbar que puedes quitar, Es para que veas por donde va la edicion del fichero