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 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159
|
program test_Hlit;
{$APPTYPE CONSOLE}
uses
SysUtils,
wdhf;
type
TypeED=record // Type venant du fichier "EDIT.pas"
case byte of
0:(
hactif: char;
rang: integer;
ecretmin: real;
ecretmax: real;
unites:array [1..4] of byte;
coeff:array [1..4] of real;
optioned:array [1..4] of byte;
optiontx:array [1..4] of integer;
valusu1: real;
valusu2: real;
edchamps1: string[12];
edchamps2: string[12];
edchamps3: string[12];
edchamps4: string[12];
);
end;
//------------------------------------------------//
var
recordFile : file; // fichier recevant l'enregistrement
size : integer; // taille de l'enregistrement
ptrRecord : pointer; // pointeur contenant l'adresse du recordFile
recno : integer; // numéro d'enregistrement
ED: TypeED; // type d'enregistrement utilisé
ficTransfert : string; // nom du fichier de transfert
const
nomficTransfert = 'trans.bin';
nomfic = 'EDIT'; // fichier dans lequel on va récupérer les informations (edit.fic)
//------------------------------------------------//
(* --------------------------------------------------------------------------
* function SetRecordParam
* renvoie true si la table demandée est valide.
*
* Description : cette fonction affecte la taille du record, ainsi qu'un
* pointeur vers ce record suivant la table demandée
* Entrees : nomfic : nom du fichier de la base (= nom de la table)
* Sorties : size : taille de la structure de donnée associée à la table
* ptrRecord : pointeur vers le record associé à la table
*
--------------------------------------------------------------------------- *)
function setRecordParam(nomfic : string;
var size : integer;
var ptrRecord : pointer): boolean;
var fichierConnu : boolean;
begin
fichierconnu:=true;
if (nomfic='EDIT') then
begin
size:= sizeof(typeED);
ptrRecord := Addr(ED);
end
else
begin
fichierConnu := false;
end;
SetRecordParam := fichierConnu;
end;
(* --------------------------------------------------------------------------
* procedure ReadAndCopyToRecord
*
* Description : Ouvre le fichier recordFile, en lit le contenu, l'écrit dans
* ptrRecord^ puis ferme le fichier.
* Entrees : RecordFile : fichier utilisé pour transmettre un record
* ptrRecord : pointeur vers le record associé à la table
* size : taille de la structure de donnée associée à la table
*
--------------------------------------------------------------------------- *)
procedure ReadAndCopyToRecord(VAR RecordFile : File; ptrRecord : pointer; size : integer);
var
i : integer;
const
ntentative = 10;
begin
i := 1;
{$IOChecks Off}
repeat {on essaye d'ouvrir le fichier plusieurs fois}
sleep(1); {avec un delai, car il faut que le fichier }
Reset(RecordFile,size); {soit crée par l'executable dos }
Inc(i);
until (IOResult = 0) or (i > ntentative);
{$IOChecks On}
if(i > ntentative) then
begin
writeln('erreur ouverture du fichier de transfert');
end;
//begin
Reset(RecordFile,size);
BlockRead(recordFile,ptrRecord^,1);
Close(recordFile);
end;
//---------------------------------------------------------------------------//
//---------------------------------------------------------------------------//
procedure GeneriqueLectureHF(VAR recordFile : file;
ptrRecord : pointer;
size : integer );
begin
recno:=1;
hlit(nomfic+'.fic',recno);
//permet de se positionner dans la base pour y effectuer la lecture.
// le problème se situe ici ou le programme n'exécute pas la fonction ReadAndCopyToRecord
// la valeur de ptrRecord est nil depuis que l'on a utilisé la fonction wdhf.hlit
ReadAndCopyToRecord(recordFile,ptrRecord,size); {copie du résultat dans le record corrrespondant}
end;
//---------------------------------------------------------------------------//
//---------------------------------------------------------------------------//
///// PROGRAMME PRINCIPAL /////
begin
fictransfert:=getcurrentdir+'\'+nomficTransfert;
Assign(recordFile,ficTransfert);
// on assigne le nomficTransfert (trans.bin) au fichier recordfile
if(setRecordParam(nomfic,size, ptrRecord)) then
begin
GeneriqueLectureHF(recordFile, ptrRecord, size);
end
else
begin
writeln('nom de fichier inconnu');
end;
;
end. |
Partager