:: Enseignements :: ESIPE :: E3INFO :: 2013-2014 :: Programmation C ::
![[LOGO]](http://igm.univ-mlv.fr/ens/resources/mlv.png) | Presque prêts pour la programmation système... |
Exercice 1 - Ça va couper chérie...
Vous devez coder une mini-version du programme cut. Vous ne gèrerez (avec getopt)
que les options -d et -f, et pour -f, vous ne prendrez en compte que
les listes de numéros de champ séparés par des virgules. MAIS, contrairement au vrai cut,
vous considérerez les suites de séparateurs comme un seul séparateur, de façon à ce qu'on
puisse, par exemple, extraire correctement avec votre programme les informations données par la
commande ls -l. De plus, si aucun nom de fichier n'est donné en argument, le programme
lira depuis l'entrée standard. Dernière différence, votre version écrira les champs sélectionnés
non pas dans l'ordre d'entrée comme le fait le vrai cut, mais selon l'ordre dans lequel
ils auront spécifiés avec l'option -f.
Afin de vous aider dans cette tâche, voici quelques suggestions:
- pensez à sscanf pour parser l'argument de l'option -f, et
stockez les numéros lus dans une liste chaînée d'entiers.
- écrivez une fonction qui lit une ligne jusqu'à un \n ou la fin de fichier,
et qui stocke les caractères lus (sauf le \n final) dans un tableau alloué
dynamiquement et réalloué si nécessaire. La fonction renverra NULL en fin de fichier.
- pour chaque ligne, parcourez la chaîne lue en remplaçant les occurrences
du caractère séparateur par des \0. Dans le même temps, créez un tableau
de char* alloué dynamiquement dans lequel vous stockerez le début de chaque
champ. Ainsi, si la chaîne lue est Il fait beau et que le séparateur est
l'espace, la case t[0] pointera sur le début de la chaîne, la case t[1]
pointera sur la case contenant le caractère f et la case t[2] pointera
sur la case contenant le caractère b. Il faudra veiller à réallouer ce tableau
si nécessaire et à retourner sa taille.
- une fois ce découpage effectué, il ne restera plus qu'à parcourir la liste contenant
les numéros des champs voulus et à les afficher, s'ils existent, avant de libérer toute la
mémoire utilisée.
© Université de Marne-la-Vallée