Entree formate en c

Fermé
stk - 27 juil. 2004 à 19:01
blurk Messages postés 486 Date d'inscription vendredi 16 avril 2004 Statut Membre Dernière intervention 15 mars 2009 - 28 juil. 2004 à 19:41
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

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
0
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
0
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... ???
0
blurk Messages postés 486 Date d'inscription vendredi 16 avril 2004 Statut Membre Dernière intervention 15 mars 2009 160
28 juil. 2004 à 19:41
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+
¤
0