Ver Mensaje Individual
  #9  
Antiguo 01-07-2015
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Reputación: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola Anel Hernandez.

Tomando en cuenta del formato del archivo que enviaste, proba de este modo:
Código Delphi [-]
procedure AddLinesToFile(const pFrom, pTo: Integer; const fSource, fTarget: string);
const
  CRLF = #$D#$A;
var
  fs: TStream;
  ts: TStrings;
  s : string;
  i : Integer;
begin
  fs := TFileStream.Create(fTarget, fmOpenReadWrite);
  try
    SetString(s, nil, fs.Size);
    fs.Read(s[1], fs.Size);
    s := s + CRLF;
    ts := TstringList.Create;
    try
      ts.BeginUpdate;
      try
        ts.LoadFromFile(fSource);
      finally
        ts.EndUpdate;
      end;
      for i:= pFrom to pTo do s := s + ts[i] + CRLF;
    finally
      ts.Free;
    end;
  finally
    fs.Position:= 0;
    fs.Write(s[1], Length(s));
    fs.Free;
  end;
end;

Código de prueba:
Código Delphi [-]
procedure TForm1.btnAddClick(Sender: TObject);
const
  MILLION = 1000000;
var
  Hz, Start, Stop: Int64;
begin
  QueryPerformanceFrequency(Hz);
  QueryPerformanceCounter(Start);

  // Añade las líneas 1257-3188 desde WRF02.DAT hacia WRF01.DAT
  AddLinesToFile(1257, 31882, 'c:\tmp\WRF02.DAT', 'c:\tmp\WRF01.DAT');

  QueryPerformanceCounter(Stop);
  ShowMessage(Format('%d µs.',[(Stop-Start) * MILLION div Hz]));
end;
Creo que demora un tiempo muy aceptable,



Saludos

Edito: Lo olvidaba ... - Tamaño de WRF01.DAT: 1,55 MB y WRF02.DAT: 12,3 MB
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 01-07-2015 a las 20:01:13.
Responder Con Cita