Entree formate en c

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

  • Votes
  • Date
  • Date décroissante
  1. ç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
    1. 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
      1. 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... ???
        1. 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+
          ¤