Entree formate en c

stk -  
blurk Messages postés 486 Date d'inscription   Statut Membre Dernière intervention   -
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

capflamme
 
ç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
damien
 
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
stk
 
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   Statut Membre Dernière intervention   160
 
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