1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86
|
const n_b = 10; // ici mettre la valeurs 'adaptée'
fields = 20; // ici mettre la valeur adaptée
Mon_Identificateur = 42;
FileName = 'mon_fichier.bin'; // par exemple
Field_length : array[1..fields] of byte =
(
4,6, // les n_b bytes de datas sont à considérer comme
2,4, // 20 champs de Fileds_Length[i] bits
4,3, // bien entendu, somme( Nbr bits = 10*8 = 80 )
5,4, // l'eploitation + loin est possible que si les champs ont 63 bits ou -
4,4,
7,1,
4,5,
4,4,
4,3,
4,4
);
type ma_struct =
record
Header : byte; // 8 bits
datas : array[1..n_b] of byte;
end;
var f : file; V : ma_struct; n_items, n_items_type_42 : integer;
procedure TForm1.Button1Click(Sender: TObject);
var p : pointer;
i,j,k : integer;
s_01,s: string;
b : byte;
Dt : array[1..fields] of longword;
begin
n_items:=0;
n_items_type_42:=0;
if not Fileexists(FileName ) then
begin
ShowMessage('Désolé mais le fichier ' + FileName + ' n''est pas présent');
exit;
end;
assignfile(f,FileName);
reset(f,1);
if filesize(f) mod sizeof(V) <> 0 then
begin
closefile(f);
ShowMessage('Désolé mais le fichier ' + FileName + ' n''est pas de taille correcte');
exit;
end;
while not eof(f) do
begin
blockread(f,v,sizeof(V));
with v do
begin
inc(n_items);
if Header = Mon_Identificateur then
begin
inc(n_items_type_42);
p:=@V.datas;
s_01:='';
for i:= 1 to (n_b shl 3) do s_01:= s_01 + ' '; // 80 espaces
j:=0;
for i:=1 to n_b do
begin
b:=datas[i];
for k:=1 to 8 do
begin
if ( b and 1) = 1 then s_01[j+9-k]:='1' else s_01[j+9-k]:='0';
b:= b shr 1;
end;
inc(j,8);
end;
end;
for i:=1 to fields do
begin
s:= copy(s_01,1,Field_length[i]);
Dt[i]:=0;
for k:=1 to length(s) do
begin
Dt[i]:=Dt[i] shl 1;
if s[1]='1' then inc(Dt[i]);
delete(s,1,1);
end;
delete(s_01,1,Field_length[i]);
end;
end;
end;
closefile(f);
end; |
Partager