PDA

Ver la Versión Completa : Quiero leer los 200 primeros bytes de un archivo de texto


noob
28-09-2008, 23:03:53
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):


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:


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/showpost.php?p=148476&postcount=5

DarkMan
29-09-2008, 16:02:13
Puedes usar tambien la clase TStream:

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:


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