dxh_master
Messages postés97Date d'inscriptionmardi 24 mai 2005StatutMembreDernière intervention25 juin 2006
-
1 févr. 2006 à 22:13
jlen100
Messages postés1606Date d'inscriptionsamedi 10 juillet 2004StatutMembreDernière intervention25 juillet 2014
-
3 févr. 2006 à 22:20
Salut a tous
je vous en suppppppplie aider moi avec block read voila ma fonction qui me donne erreur e/s 998 :
Function Readhexa(Fichier:string;offeset:string):string;
Var
E4 : File;
E3 : Char;
I : LongInt;
a :integer;
Begin
AssignFile(E4, fichier);
Reset(E4,1);
Blockread(E4,E3,aa);
result:=inttostr(aa);
If FileSize(E4)<>Files then
begin
MessageDlg('Erreur dans le fichier!.',mtError,[mbOk],0);
end;
End;
Cirec
Messages postés3833Date d'inscriptionvendredi 23 juillet 2004StatutModérateurDernière intervention18 septembre 202250 2 févr. 2006 à 00:53
Salut,
essaye comme ça j'ai un peut épuré le code :
Function Readhexa(Fichier:string):string;
Var E4 : File;
E3 : array[0..255] of Char;
I, aa : Integer;
Begin AssignFile(E4, fichier);
Try Reset(E4,1);
Blockread(E4,E3,SizeOf(E3), aa);
Finally CloseFile(E4);
End;
result:= Format('%d Caractère(s) Lu ', [aa]);
For I : = 0 to 255 do Result := Result + E3[I];
End;
dxh_master
Messages postés97Date d'inscriptionmardi 24 mai 2005StatutMembreDernière intervention25 juin 2006 2 févr. 2006 à 18:57
j aimerait comprendre ce block :
Try
Reset(E4,1);
Blockread(E4,E3,SizeOf(E3), aa);
Finally
CloseFile(E4);
End;
result:= Format('%d Caractère(s) Lu ', [aa]);
For I := 0 to 255 do
Result := Result + E3[I];
en fet tout la fonctio :D
Vous n’avez pas trouvé la réponse que vous recherchez ?
Cirec
Messages postés3833Date d'inscriptionvendredi 23 juillet 2004StatutModérateurDernière intervention18 septembre 202250 3 févr. 2006 à 01:43
Salut,
je vais essayer de t'expliquer ce qui se passe
dans cette Fonction :
Function Readhexa(Fichier:string):string;
Var E4 : File;
E3 : array[0..255] of Char;
I, aa : Integer;
Begin AssignFile(E4, fichier); // on assigne le nom du fichier à la variable E4
Try Reset(E4,1); // on ouvre le fichier en lecture et on place le curseur sur le premier caractère à lire
Blockread(E4,E3,SizeOf(E3), aa); // on lit un block de 256 caractères (SizeOf(E3) = 256) et aa renvoie le nombre
// de caractères éffectivement lu
Finally
CloseFile(E4); // et on referme le Fichier
End; result: Format('%d Caractère(s) Lu ', [aa]); // si aa est à 128 par Ex. : Result sera = à '128 Caractère(s) Lu '
For I : = 0 to aa do // aa étant plus juste que 255
// et on ajoute ce que l'on a précédement lu caractère par caractère à Result
Result := Result + E3[I];
End;
jlen100
Messages postés1606Date d'inscriptionsamedi 10 juillet 2004StatutMembreDernière intervention25 juillet 201413 3 févr. 2006 à 22:20
try finaly sert à la gestion des exceptions: si une des instruction
situées entre try et finaly ne peut être exécuté (fichier absent
par exemple) on passe directement à l'instruction située après finaly
sans "planté" le programme
voici en plus détaillé ce que dit l'aide DELPHI:
"
Dans certains cas, il est indispensable que
certaines parties d'une opération s'effectuent, que l'opération soit ou
non interrompue par une exception. Si, par exemple, une routine prend
le contrôle d'une ressource, il est souvent important que cette
ressource soit libérée quelle que soit la manière dont la routine
s'achève. Vous pouvez, dans ce genre de situations, utiliser une
instruction try...finally.
L'exemple suivant illustre comment du code qui ouvre et traite un
fichier peut garantir que le fichier est fermé, même s'il y a une
erreur à l'exécution.
Reset(F);
try
... // traiter le fichier F
finally
CloseFile(F);
end;
Une instruction try...finally a la syntaxe suivante :
try listeInstructions1 finally listeInstructions2 end
où chaque listeInstructions est une suite d'instructions délimitées par
des points-virgule. L'instruction try...finally exécute les
instructions de listeInstructions1 (la clause try). Si
listeInstructions1 se termine sans déclencher d'exception,
listeInstructions2 (la clause finally) est exécutée. Si une exception
est déclenchée lors de l'exécution de listeInstructions1, le contrôle
est transféré à listeInstructions2 ; quand listeInstructions2 a fini de
s'exécuter, l'exception est redéclenchée. Si un appel des procédures
Exit, Break ou Continue force la sortie de listeInstructions1,
listeInstructions2 est exécutée automatiquement. Ainsi, la clause
finally est toujours exécutée quelle que soit la manière dont se
termine l'exécution de la clause try.
Si une exception est déclenchée sans être gérée par la clause finally,
cette exception se propage hors de l'instruction try...finally et toute
exception déjà déclenchée dans la clause try est perdue. La clause
finally doit donc gérer toutes les exceptions déclenchées localement
afin de ne pas perturber la propagation des autres exceptions.