I got lost, I dont remember what I was doing.
It compiles but nothing is shown.
I wasnt supposed to use myReadWord (Header.Fieldnrs); am guessing...
program Crear;
uses SysUtils;
type
THeader = record
Serial: Word; //2 bytes
Filename: String[255]; //1 byte
Date: Word; //2 bytes
Fieldnrs: Word; //2 bytes
NrsRecords: Word; //2 bytes
end;
TFields = record
Fieldnr: Word; //2 bytes
Fieldname: ShortString; //1 byte
end;
TRecordField = record
Fieldnr: Word; //2 bytes
FieldText: String[255]; //1 byte
end;
var
BinaryStream: File;
Header: THeader; //Header.Serial Filename Date Fieldnrs NrsRecords
Fields: array [0..20] of TFields; //Fields.Fieldnr Fields.Fieldname
Rec: array[0..20] of TRecordField; //Rec.Fieldnr Rec.FieldText
Len: Byte;
nrs: Integer; //2 bytes
I,N: Integer;
procedure myRead(var Buffer; Size: Integer);
begin
BlockRead(BinaryStream, Buffer, Size);
end;
procedure myReadByte(var B:Byte);
begin
myRead(B, 1);
end;
procedure myReadWord(var W:Word);
begin
myRead(W, 2);
W := Swap(W);
end;
procedure myReadString(var S:ShortString);
begin
myRead(Len, 1);
S[0] := Chr(Len);
myRead(S[1], Len);
end;
begin
assign(BinaryStream, 'C:\Dev-Pas\EXAMEN2.dat');
reset(BinaryStream, 1);
myReadWord(Header.Serial);
myReadString(Header.Filename);
myReadWord(Header.Date);
myReadWord(Header.Fieldnrs);
Header.Serial := Swap(Header.Serial);
Header.Fieldnrs := Swap(Header.Fieldnrs);
for nrs := 0 to Header.Fieldnrs - 1 do
begin
myRead (Fields[nrs].Fieldnr, 2);
Fields[nrs].Fieldnr := Swap (Fields [nrs].Fieldnr);
myRead (Fields[nrs].Fieldname[0],1);
myRead (Fields[nrs].Fieldname[1], ord(Fields[nrs].Fieldname[0]));
end;
myRead(Header.NrsRecords, 2);
Header.NrsRecords := Swap(Header.NrsRecords);
Writeln ('Nro. de Serie: ', Header.Serial);
Writeln ('Full Filename: ', Header.Filename);
Writeln ('Fecha Modificacion: ', Header.Date);
Writeln ('Cantidad de Campos Customizados: ', Header.Fieldnrs);
for nrs := 0 to Header.Fieldnrs - 1 do
begin
Writeln ('Campo [codigo: ',Fields[nrs].Fieldnr,', ','descripcion: ',Fields[nrs].Fieldname ,']' );
end;
Writeln ('Cantidad de Registros: ', Header.NrsRecords);
Writeln ('------------------------');
for N := 0 to Header.NrsRecords - 1 do
begin
myReadWord (Header.Fieldnrs);
for I := 0 to Header.Fieldnrs - 1 do
begin
myReadWord (Rec[I].Fieldnr);
myReadString (Rec[I].FieldText);
end;
Writeln (Fields[Rec[I].Fieldnr - 1].Fieldname,': ',Rec[Rec[I].Fieldnr].FieldText);
end;
Writeln ('----[FIN CONTENIDO DEL ARCHIVO]-----------------');
Close(BinaryStream);
ReadLn;
end.