délimiteur est plus complexe qu’il n’y paraît. Certes les langages peuvent fournir des fonctions appropriées,
mais comment feriezvous vousmême ?
Sur ce dernier point c’est assez facile à formaliser sous forme d’algorithme. Une fonction "split" reçoit trois paramètres :
une chaîne de caractères, le délimiteur, et une position de départ. Elle retourne le champ à partir de cette position, qui
est le numéro de caractère de la chaîne, démarrant à un. Si la fonction retourne une chaîne vide, c’est qu’il n’y a plus
rien.
Fonction split(txt :chaîne,delim :caractère,pos :entier) :chaîne
Var
l,i :entiers
tmp :chaîne ;
Début
l=longueur(delim)
tmp←""
i←pos
Tant que i<=l et milieu(txt,i,1)!=delim Faire
tmp←tmp&milieu(txt,i,1) // un seul caractère concaténé
i←i+1
FinTantQue
Retourne tmp
FinFonct
Pour exploiter cette fonction voici un petit programme qui recherche successivement tous les champs d’une ligne. Il
suffit de boucler tant que la fonction split ne retourne pas de chaîne vide. À chaque passage dans la boucle il faut
incrémenter la position de la longueur de la chaîne trouvée, plus 1 (le délimiteur), pour se trouver sur l’éventuel
nouveau champ…
Programme decoupe
Var
ligne,result :chaîne
pos :entier
Début
pos←1
ligne←"root:x:0:0:root:/root:/bin/bash"
result←"toto"
Tant que result!="" Faire
result←decoupe(ligne," :",pos)
Si result!="" Alors
Afficher result
pos←pos+longueur(result)+1 //après le délimiteur
FinSi
FinTantQue
Fin
Vous constatez que le traitement n’est pas anodin, et sur des milliers d’enregistrements ça peut compter.
2. Largeur fixe
Dans des enregistrements à largeur fixe, il n’y a pas de délimiteurs. Chaque champ a une longueur prédéfinie et
occupe toute cette longueur, quitte à être complété par des espaces. Les champs sont ainsi collés les uns aux autres,
en un seul gros bloc.
S’il fallait convertir une ligne cidessus en enregistrement fixe il faudrait savoir que :
q Un login fait en principe 8 caractères.
q Un mot de passe 1 seul (stocké ailleurs).
q Les UID et GID utilisent au maximum 5 chiffres.
q Le commentaire sera arbitrairement (pour l’exemple) de 15 caractères.
q Les chemins et shells arbitrairement aussi à 15 caractères.
- 2 -
© ENI Editions - All rigths reserved - Jonifar lina
152
mais comment feriezvous vousmême ?
Sur ce dernier point c’est assez facile à formaliser sous forme d’algorithme. Une fonction "split" reçoit trois paramètres :
une chaîne de caractères, le délimiteur, et une position de départ. Elle retourne le champ à partir de cette position, qui
est le numéro de caractère de la chaîne, démarrant à un. Si la fonction retourne une chaîne vide, c’est qu’il n’y a plus
rien.
Fonction split(txt :chaîne,delim :caractère,pos :entier) :chaîne
Var
l,i :entiers
tmp :chaîne ;
Début
l=longueur(delim)
tmp←""
i←pos
Tant que i<=l et milieu(txt,i,1)!=delim Faire
tmp←tmp&milieu(txt,i,1) // un seul caractère concaténé
i←i+1
FinTantQue
Retourne tmp
FinFonct
Pour exploiter cette fonction voici un petit programme qui recherche successivement tous les champs d’une ligne. Il
suffit de boucler tant que la fonction split ne retourne pas de chaîne vide. À chaque passage dans la boucle il faut
incrémenter la position de la longueur de la chaîne trouvée, plus 1 (le délimiteur), pour se trouver sur l’éventuel
nouveau champ…
Programme decoupe
Var
ligne,result :chaîne
pos :entier
Début
pos←1
ligne←"root:x:0:0:root:/root:/bin/bash"
result←"toto"
Tant que result!="" Faire
result←decoupe(ligne," :",pos)
Si result!="" Alors
Afficher result
pos←pos+longueur(result)+1 //après le délimiteur
FinSi
FinTantQue
Fin
Vous constatez que le traitement n’est pas anodin, et sur des milliers d’enregistrements ça peut compter.
2. Largeur fixe
Dans des enregistrements à largeur fixe, il n’y a pas de délimiteurs. Chaque champ a une longueur prédéfinie et
occupe toute cette longueur, quitte à être complété par des espaces. Les champs sont ainsi collés les uns aux autres,
en un seul gros bloc.
S’il fallait convertir une ligne cidessus en enregistrement fixe il faudrait savoir que :
q Un login fait en principe 8 caractères.
q Un mot de passe 1 seul (stocké ailleurs).
q Les UID et GID utilisent au maximum 5 chiffres.
q Le commentaire sera arbitrairement (pour l’exemple) de 15 caractères.
q Les chemins et shells arbitrairement aussi à 15 caractères.
- 2 -
© ENI Editions - All rigths reserved - Jonifar lina
152
