Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   como leer n caracteres de un archivo (https://www.clubdelphi.com/foros/showthread.php?t=33945)

manolop 21-07-2006 12:08:57

como leer n caracteres de un archivo
 
Hola a todos, tengo un archivo de texto que es muy muy grande (del orden de 800 MB) y necesito leer bloques de 700 bytes. Estoy probando este codigo, pero no me sirve pq no puedo limitar la informacion que leo:

var
fich:TextFile;
cad:ansistring;
begin
// database1.Commit;
try
try
AssignFile(fich,'fichero.txt');
reset(fich);
while not eof(fich) do
begin
readln(fich,cad);
memo1.Text:=memo1.Text+cad; //esto es solo para ver el resultado
end;
finally
closeFile(fich);
end;
except
on E:Exception do
showmessage('Error de acceso al fichero con msg: '+E.Message);
end;

Por favor, si alguien sabe como deberia leer el archivo, les estaria muy agradecido. Muchas gracias.

Neftali [Germán.Estévez] 21-07-2006 13:05:16

El problema es que estás leyendo líneas, tal vez deberías leer caracteres.
Revisa la ayuda sobre Read.

manolop 21-07-2006 13:24:52

ya me estoy leyendo el reset pero no me deja pasarle el numero de caracteres a leer, y creia que con BlockRead deberia pero no me deja pasarle una cadena como buffer. La verdad es que no se como podria hacer esto. Si supieras solo que funcion utilizar para leer n caracteres ya lo tendria todo solucionado. Muchas gracias.

Neftali [Germán.Estévez] 21-07-2006 14:03:21

Creo que si utilizas Seek para colocarte en una posicióin del fichero y luego Read (no ReadLn) para leer n caracteres te debería funcionar.

seoane 21-07-2006 14:20:55

Prueba con esto:

Código Delphi [-]
var
  Fichero: File;
  Buffer: array[0..700] of Char; // 700 bytes + 1
  Leidos: Integer;
  Str: string;
begin
  AssignFile(Fichero,'c:\Archivo.txt');
  Filemode:= fmOpenRead;
  {$I-}
    Reset(Fichero,1);
  {$I+}
  if IOResult = 0 then
  begin
    repeat
      FillChar(Buffer,Sizeof(Buffer),0);
      BlockRead(Fichero,Buffer,Sizeof(Buffer)-1,Leidos);
      if Leidos > 0 then
      begin
        Str:= String(PChar(@Buffer));
        // Aqui haces lo que quieres con el string
        ShowMessage('Longitud del string = ' + IntToStr(Length(Str)));
      end;
    until Leidos < (Sizeof(Buffer) - 1);
    CloseFile(Fichero);
  end else
    ShowMessage('No puedo abrir el archivo');
end;

Vamos leyendo los bytes de 700 en 700 y luego los convertimos en un string. el byte extra en el buffer es porque las cadenas tipo PChar necesitan acabar en un carácter nulo. El resto creo que se entiende bien, sino pregunta.

manolop 21-07-2006 14:36:48

muchisisimas gracias, me has ahorrado un monton de tiempo. Muchas gracias de verdad. Un fuerte abrazo :)

sépoco 18-12-2007 23:50:06

Leer linear de archivo .txt
 
IMP20983;0;IMP20983
VK RF SE1052 SO M;9008;60490001070

Dejar en una variable cada campo separado por ;
es un archivo .txt y los campos son variables. Leo el archivo y lo traspaso a un Memo.

if OpenDialog1.Execute then
begin
AssignFile(F, OpenDialog1.FileName);
Reset(F);
while not eof(F) do
begin
Readln(F, S);
Memo.Lines.Add(S);
end;
CloseFile(F);
end;


La franja horaria es GMT +2. Ahora son las 17:30:13.

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