Entree formate en c
stk
-
blurk Messages postés 493 Date d'inscription Statut Membre -
blurk Messages postés 493 Date d'inscription Statut Membre -
bonjour,
je cherche à lire une chaine de caractére à partir d'un fichier en c
sont format est le suivant :
chaine1 chaine2
le probleme, c'est que chaine2 peut contenir des espace.
entre chaine1 et chaine2, il peut y avoir une ou plusieurs tabulations
j'essaye avec fscanf :
while ( (fscanf (fp, "%10s %10s", champ1, champ2)) != EOF)
printf ("champ 1 : %s, champ2 : %s\n", &champ1, &champ2);
je ne sais pas comment faire pour faire la difference entre les espaces et le tabulation :(
quelq'un connait t'il la facon de faire (ou une autre fonction + pratique ??)
merci par avance
je cherche à lire une chaine de caractére à partir d'un fichier en c
sont format est le suivant :
chaine1 chaine2
le probleme, c'est que chaine2 peut contenir des espace.
entre chaine1 et chaine2, il peut y avoir une ou plusieurs tabulations
j'essaye avec fscanf :
while ( (fscanf (fp, "%10s %10s", champ1, champ2)) != EOF)
printf ("champ 1 : %s, champ2 : %s\n", &champ1, &champ2);
je ne sais pas comment faire pour faire la difference entre les espaces et le tabulation :(
quelq'un connait t'il la facon de faire (ou une autre fonction + pratique ??)
merci par avance
4 réponses
-
ça fait horriblement longtemps que j'ai pas toucher au C mais si je me trompe pas l'espace a pour code 0x20 essai donc de repéré ce caractere dans ton code....
cap -
Salut,
Si tu ne connait pas de maniere precise le format de tes données scanf ne te sera pas d'une grande utilité. Deux solutions, soit faire le decoupage à la main ( facile dans le cas que tu decris) soit si les données sont plus complexe, les decrire à l'aide d'expression regulieres
A+
Damien -
merci pour vos reponces...
on m'a conseiller d'utiliser quelque chose du genre :
fscanf (fp, "%[^\t]%*[\t]%[^\n] ",champ1,champ2)
(ca ressemble en effet à une expression reguliere...)
sinon pour info le fichier en question est : /etc/X11/xkb/rules/xfree86.lst
extrait :
! model
pc101 Generic 101-key PC
pc102 Generic 102-key (Intl) PC
pc104 Generic 104-key PC
pc105 Generic 105-key (Intl) PC
dell101 Dell 101-key PC
everex Everex STEPnote
je cherche à stoker le model dans une variable et la description dans une autre...
sinon peut tu me donner quelque indices sur la facon de faire "à la main", utilise-tu strtok etc... ??? -
fscanf va lire jusqu'au premier espace (0x20) ou retour chariot (\n)
rencontré.
Tu peux utiliser fgetc() qui lit un seul caractere et le renvoie
au programme. Dans ce cas, c'est à toi de faire le traitement
de formatage lors de la lecture.
Je crois que c'est ça que damien appelle faire le découpage à la main ?
a+
¤