Lire des mots dans un fichier avec le ";" comme séparateur

Résolu
nemo1310 Messages postés 61 Date d'inscription   Statut Membre Dernière intervention   -  
nemo1310 Messages postés 61 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

j'ai un fichier texte que je souhaite lire avec C.
le fichier contient:" Les Aventures de Tintin;Belgique;24 "
Comment obtenir en sorite du programme 3 variables qui ont pour valeur:
titre = Les Aventures de Tintin
pays = Belgique
num = 24

je vous remercie pour votre aide

1 réponse

  1. Dalfab Messages postés 638 Date d'inscription   Statut Membre Dernière intervention   102
     
    Bonjour,

    Commençons par un exemple simple (mais qui ne marche pas):
    char buffer[100];
    if ( fgets( buffer , sizeof buffer , stdin ) )
    {
        char titre[100];
        char pays[100];
        int num;
        if ( sscanf( buffer , "%s;%s;%d" , titre , pays , &num ) == 3 )
        {
            printf("ok, lu : %s %s %d" , titre , pays , num );
        }
        else
        {
        }
    }
    Le sscanf considère l'espace comme séparateur et n'extrait pas correctement le titre.

    Il faut donc remplacer le sscanf par une fonction à écrire plus pertinente.
    La fonction doit rechercher dans le buffer les ';' et extraire les sous-chaines

    La fonction strchr(,) qui retourne l'adresse de la première occurrence du caractère recherché, ou bien NULL si caractère n'est pas trouvé pourrait être utilisée.
    0
    1. [Dal] Messages postés 6122 Date d'inscription   Statut Contributeur Dernière intervention   1 108
       
      Salut Dalfab,

      sscanf()
      fait l'affaire si on utilise un "negated scanset" sur le point virgule, du genre
      %100[^;]
      au lieu de %s pour les chaînes.

      :-)

      Dal
      0
    2. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
       
      D'ailleurs, un %99 serait mieux :-).
      0
    3. [Dal] Messages postés 6122 Date d'inscription   Statut Contributeur Dernière intervention   1 108
       
      oui, merci fiddy.. à 3 on va y arriver :-P
      0
    4. Dalfab Messages postés 638 Date d'inscription   Statut Membre Dernière intervention   102 > [Dal] Messages postés 6122 Date d'inscription   Statut Contributeur Dernière intervention  
       
      En effet je complique pour rien. Après avoir utilisé une bibliothèque ultra-réduite pour MSP430 n'ayant pas les scanset, j'ai pris de mauvaises habitudes. A l'époque j'avais dû écrire mes propres fonction vscanf() et vprintf().
      Merci Dal et fiddy d'avoir redressé la barre.
      0
    5. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
       
      Pas de quoi :-).
      À noter que sans sscanf(), il y avait aussi la possibilité d'utiliser strtok() :-).
      0