Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Archivo TXT sobredimensionado (https://www.clubdelphi.com/foros/showthread.php?t=71712)

cmfab 05-01-2011 20:16:56

Archivo TXT sobredimensionado
 
Hola a todos

A ver si alguien me ayuda

Como puedo cargar un archivo de texto que pesa sobre los 2GB anlizar linea por linea si existe coincidencia con un listado de frases o palabras y en el caso que coincidan poder eliminar la linea del archvio txt y salvarlo

Desde ya gracias a todos

rgstuamigo 05-01-2011 20:51:23

Has intentado de ésta forma??:confused:
Sasludos...:)

cmfab 05-01-2011 21:10:25

Gracias por tu respuesta. lo anailzaré. aunque no trata el tema de eliminar lineas. no se tampoco si se podrán cargar tantas lineas en un TMemo para hacer la comparacion, si coinciden con las palabras eliminar las lieneas del TMemo y volver a grabar el archivo txt.

cmfab 05-01-2011 21:16:26

Probado no resulta cargarlo en un TMemo, parece por el tamaño da un error de out of memory

cmfab 05-01-2011 21:33:45

Existirá algun componente tipo TMemo que asimile cantidades enormes de lineas, por ejemplo cientos de miles ?

Delfino 05-01-2011 21:39:11

Mira en el help la clase TStringStream..

ecfisa 05-01-2011 22:56:20

Hola cmfab.

Si no se puede trabajar en memoria por el tamaño, te va a quedar hacerlo en disco.

Una forma simple sería:
.Crear un archivo destino.
.Leer las línea del origen
.Copiarlas si coinciden con un criterio
.Borrar archivo origen
.Renombrar archivo destino como origen

Un ejemplo muy simplificado:
Código Delphi [-]
function CopiarLinea(Linea: string): Boolean;
begin
  // Aca van las evaluaciónes que tengas que hacer, uso cualquiera para darle funcionalidad al código 
  Result:= False;
  if Pos('el verde prado', Linea) = 0 then // si no contiene la frase 'el verde prado', se copia
    Result:= True;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  f1,f2: TextFile;
  Linea: string;
begin
  AssignFile(f1, 'C:\Origen.txt');
  Reset(f1);
  AssignFile(f2, 'C:\Destino.TXT');
  Rewrite(f2);
  while not Eof(f1) do
  begin
    Readln(f1,Linea);
    if CopiarLinea(Linea) then
      Writeln(f2, Linea);
  end;
  CloseFile(f1);
  CloseFile(f2);
  if DeleteFile('C:\Origen.txt') then
    RenameFile('C:\Destino.TXT', 'C:\Origen.txt');
end;

Si la aplicación va a ser usada con mucha frecuencia hay métodos más eficientes, pero para un uso moderado te va a funcionar.

Un saludo.

cmfab 06-01-2011 14:37:39

Gracias por sus respuiesta. funcionó correctamente el código propuesto. claro este pequeño programa se utilizará solo esporádicamente. muhcas gracias a todos


La franja horaria es GMT +2. Ahora son las 05:41:18.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi