BlockRead

Signaler
Messages postés
97
Date d'inscription
mardi 24 mai 2005
Statut
Membre
Dernière intervention
25 juin 2006
-
Messages postés
1606
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
25 juillet 2014
-
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;

7 réponses

Messages postés
3826
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
10 mai 2021
46
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;

si tu as encore des questions n'hésite pas

@+
Cirec
Messages postés
97
Date d'inscription
mardi 24 mai 2005
Statut
Membre
Dernière intervention
25 juin 2006

en fet sa va lire tout le fichier?
et jaimerait juste lire un byt! avec son offeset!
Messages postés
1606
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
25 juillet 2014
12
salut

utilises seek(offset) pour placer le pointeur sur l'octet à lire puis tu fais blockread(E4;E3,1)



tu peux aussi declarer E3:string[1]; et dans ce cas l'octet sera en E3[1];

@+

jlen
Messages postés
97
Date d'inscription
mardi 24 mai 2005
Statut
Membre
Dernière intervention
25 juin 2006

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
Messages postés
3826
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
10 mai 2021
46
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;

est ce que c'est suffisement claire comme ça

@+
Cirec
Messages postés
97
Date d'inscription
mardi 24 mai 2005
Statut
Membre
Dernière intervention
25 juin 2006

je sais pas a quoi cela sert :

Try
...
Finally
...
End;
Messages postés
1606
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
25 juillet 2014
12
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.

"

@+

jlen