Entree formate en c

stk -  
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

4 réponses

  1. 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
  2. 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
  3. 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
  4. blurk Messages postés 493 Date d'inscription   Statut Membre 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