La variable en second paramètre reçoit l’enregistrement, la ligne lue. Dans l’exemple suivant, un enregistrement du
fichier des mots de passe de l’exemple cidessus est lu, partant du principe que la largeur est fixe, puis
l’enregistrement est découpé pour récupérer le login et l’uid, converti en entier.
Programme OUVRE
Var
fic :fichier séquentiel
nom :chaîne
ligne,login :chaîne
uid :entier
Début
nom←"passwd"
Ouvrir nom dans fic en lecture
/* traitements */
Lire(fic,ligne)
login←trim(milieu(ligne,1,8))
uid←chnum(milieu(ligne,10,5))
Afficher login,uid
Fermer fic
Fin
Que faire cependant quand on ne connaît pas à l’avance le nombre de lignes du fichier ? Comment savoir si la fin du
fichier a été atteinte ?
Vous avez deux possibilités :
q Selon certains formalismes algorithmiques, Lire est une fonction qui retourne un booléen, donc vrai ou faux.
Si vous tentez de lire un enregistrement et qu’il n’y en a plus, Lire retourne FAUX. Autrement dit, tant que Lire
est VRAI, on peut continuer à lire les lignes suivantes.
q La fonction EOF() parfois appelée aussi FinFichier() retourne un booléen qui indique si la fin du fichier a été
atteinte ou non. Cette fonction prend en paramètre le nom logique du fichier. Elle retourne VRAI si la fin du
fichier a été atteinte, donc s’il ne reste plus d’enregistrements à lire.
La fonction algorithmique EOF() va retourner VRAI si le fichier que vous ouvrez ne contient pas
d’enregistrements, donc si la fin de fichier est atteinte dès l’ouverture. Or dans quelques langages, le
programme ne le sait pas tant qu’il n’a pas tenté de lire un enregistrement, et donc une fonction de ce type
retournerait FAUX tant qu’aucune lecture n’aurait eu lieu. Prudence…
Le programme suivant va lire tout le fichier des mots de passe et placer les logins et UID dans des tableaux. Comme
on ne connaît pas à l’avance le nombre d’éléments, on se limitera arbitrairement à 100 lignes.
Programme LIREFIC
Var
fic :fichier séquentiel
nom :chaîne
ligne:chaîne
i:entier
login :tableau[1..100] de chaînes
uid :tableau[1..100] d’entiers
Début
nom←"passwd"
i←0
Ouvrir nom dans fic en lecture
Tant que NON EOF(fic) Faire
Lire(fic,ligne)
i←i+1
login[i] ←trim(milieu(ligne,1,8))
uid[i] ←chnum(milieu(ligne,10,5))
FinTantQue
Afficher i," enregistrements lus"
Fermer fic
Fin
b. Écriture
- 2 -
© ENI Editions - All rigths reserved - Jonifar lina
156
fichier des mots de passe de l’exemple cidessus est lu, partant du principe que la largeur est fixe, puis
l’enregistrement est découpé pour récupérer le login et l’uid, converti en entier.
Programme OUVRE
Var
fic :fichier séquentiel
nom :chaîne
ligne,login :chaîne
uid :entier
Début
nom←"passwd"
Ouvrir nom dans fic en lecture
/* traitements */
Lire(fic,ligne)
login←trim(milieu(ligne,1,8))
uid←chnum(milieu(ligne,10,5))
Afficher login,uid
Fermer fic
Fin
Que faire cependant quand on ne connaît pas à l’avance le nombre de lignes du fichier ? Comment savoir si la fin du
fichier a été atteinte ?
Vous avez deux possibilités :
q Selon certains formalismes algorithmiques, Lire est une fonction qui retourne un booléen, donc vrai ou faux.
Si vous tentez de lire un enregistrement et qu’il n’y en a plus, Lire retourne FAUX. Autrement dit, tant que Lire
est VRAI, on peut continuer à lire les lignes suivantes.
q La fonction EOF() parfois appelée aussi FinFichier() retourne un booléen qui indique si la fin du fichier a été
atteinte ou non. Cette fonction prend en paramètre le nom logique du fichier. Elle retourne VRAI si la fin du
fichier a été atteinte, donc s’il ne reste plus d’enregistrements à lire.
La fonction algorithmique EOF() va retourner VRAI si le fichier que vous ouvrez ne contient pas
d’enregistrements, donc si la fin de fichier est atteinte dès l’ouverture. Or dans quelques langages, le
programme ne le sait pas tant qu’il n’a pas tenté de lire un enregistrement, et donc une fonction de ce type
retournerait FAUX tant qu’aucune lecture n’aurait eu lieu. Prudence…
Le programme suivant va lire tout le fichier des mots de passe et placer les logins et UID dans des tableaux. Comme
on ne connaît pas à l’avance le nombre d’éléments, on se limitera arbitrairement à 100 lignes.
Programme LIREFIC
Var
fic :fichier séquentiel
nom :chaîne
ligne:chaîne
i:entier
login :tableau[1..100] de chaînes
uid :tableau[1..100] d’entiers
Début
nom←"passwd"
i←0
Ouvrir nom dans fic en lecture
Tant que NON EOF(fic) Faire
Lire(fic,ligne)
i←i+1
login[i] ←trim(milieu(ligne,1,8))
uid[i] ←chnum(milieu(ligne,10,5))
FinTantQue
Afficher i," enregistrements lus"
Fermer fic
Fin
b. Écriture
- 2 -
© ENI Editions - All rigths reserved - Jonifar lina
156
