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
| program Test;
{$mode objfpc}{$H+}
uses
SysUtils;
{ transforme un tableau de byte en chaîne }
function ToStr(Tab : array of Byte): String;
var
I : Integer;
begin
Result:='';
for I:=Low(Tab) to High(Tab) - 1 do
Result:=Result+Chr(Tab[I]);
Result:=Result+Chr(Tab[High(Tab)]);
{ remplace les caractères spéciaux par '_' }
for I:=1 to Length(Result) do
if Result[I] < ' ' then Result[I]:='_';
end;
var
DataFile : file;
B : Byte;
TabByte : array [1..20] of Byte;
DynTabByte : array of Byte;
Count : Word;
begin
Assign(DataFile, 'test.pas');
Reset(DataFile, 1);
// Lecture de 1 Byte dans B
BlockRead(DataFile, B, 1, Count);
WriteLn(Chr(B), ' : ', Count);
// Remplissage de tout TabByte
BlockRead(DataFile, TabByte, Length(TabByte), Count);
WriteLn(ToStr(TabByte), ' : ', Count);
SetLength(DynTabByte, 10);
// Remplissage de DynTabByte devrait être
// BlockRead(DataFile, DynTabByte, Length(DynTabByte), Count);
// Mais ==> Runtime error 216
//
// En fait pour les tableaux dynamiques il faut écrire
BlockRead(DataFile, DynTabByte[0], Length(DynTabByte), Count);
WriteLn(ToStr(DynTabByte), ' : ', Count);
// Cette écriture marche aussi pour les tableaux statiques
BlockRead(DataFile, TabByte[1], Length(TabByte), Count);
WriteLn(ToStr(TabByte), ' : ', Count);
// Comparaison des adresses
WriteLn;
WriteLn('TabByte : ', Cardinal(@TabByte):10, ' : ', Cardinal(@TabByte[1]):10);
WriteLn('DynTabByte : ', Cardinal(@DynTabByte):10, ' : ', Cardinal(@DynTabByte[0]):10);
Close(DataFile);
end. |
Partager