Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Quiero leer los 200 primeros bytes de un archivo de texto (https://www.clubdelphi.com/foros/showthread.php?t=60337)

noob 28-09-2008 23:03:53

Quiero leer los 200 primeros bytes de un archivo de texto
 
Se que con System.Read pasándole como parámetro un char leemos un char y se que con System.Readln pasándole como parámetro un string leemos una línea. Pero me surge una duda.

¿Cómo puedo leer de poco en poco? Es decir, leo los primeros 200 bytes los proceso, luego los siguientes 200 bytes y los proceso y así hasta el final del archivo de texto, ¿es esto posible? Gracias.

Neftali [Germán.Estévez] 29-09-2008 08:47:38

Extraído de la ayuda de Delphi (sobre read):

Código Delphi [-]
var
  F1, F2: TextFile;
  Ch: Char;
begin
  if OpenDialog1.Execute then begin
    AssignFile(F1, OpenDialog1.Filename);
    Reset(F1);
    if SaveDialog1.Execute then begin
      AssignFile(F2, SaveDialog1.Filename);
      Rewrite(F2);
      while not Eof(F1) do begin
        Read(F1, Ch);
        Write(F2, Ch);
      end;
      CloseFile(F2);
    end;
    CloseFile(F1);
  end;

end;

Supongo que si en lugar del While pones un:

Código Delphi [-]
  for i:=0 to 200 do begin

debería leer los 200 primeros caracteres.

seoane 29-09-2008 13:15:26

Aqui pedia leerlos de 700 en 700 pero supongo que te haces una idea:
http://www.clubdelphi.com/foros/show...76&postcount=5

DarkMan 29-09-2008 16:02:13

Puedes usar tambien la clase TStream:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var STR: TFileStream;
    Buffer: Array [0..199] of Byte;
    BytesRead: Integer;
begin
  If OpenDialog1.Execute then
  begin
   If not FileExists( OpenDialog1.FileName ) then
       raise exception.Create('el fichero expecificado no existe');
 
   {Si el fichero existe, cargamos el fichero}
   STR:= TFileStream.Create( OpenDialog1.FileName, FMOpenRead );
 
   {Leemos de 200 en 200 bytes}
   BytesRead:= 0;
   STR.Position:=0;
 
   Repeat
    FillChar(Buffer, 200, 0); //Vaciamos buffer
    BytesRead:= BytesRead + STR.Read(Buffer, SizeOf(Buffer)); //leemos 200 Bytes
    Procesar( Buffer ); //procesamos 200 bytes
   until BytesRead = STR.Size;
 
   STR.Free;
  end;
end;

roman 29-09-2008 16:47:09

Nda mas por poner alguna otra posibilidad:

Código Delphi [-]
type
  TBuffer = record
    Data: array[1..200] of Char;
  end;

procedure TForm1.Button1Click(Sender: TObject);
var
  Archivo: file of TBuffer;
  B: TBuffer;

begin
  AssignFile(Archivo, 'archivo.dat');
  Reset(Archivo);

  while algo do
  begin

    Read(Archivo, B);

  end;

  CloseFile(Archivo);
end;

// Saludos


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

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