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

[Résolu/Fermé]
Signaler
Messages postés
61
Date d'inscription
mardi 7 mai 2013
Statut
Membre
Dernière intervention
3 juin 2017
-
Messages postés
61
Date d'inscription
mardi 7 mai 2013
Statut
Membre
Dernière intervention
3 juin 2017
-
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

Messages postés
591
Date d'inscription
dimanche 7 février 2016
Statut
Membre
Dernière intervention
26 octobre 2021
81
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.
Messages postés
11066
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
1 787
D'ailleurs, un %99 serait mieux :-).
Messages postés
5639
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
27 octobre 2021
952
oui, merci fiddy.. à 3 on va y arriver :-P
Messages postés
591
Date d'inscription
dimanche 7 février 2016
Statut
Membre
Dernière intervention
26 octobre 2021
81 >
Messages postés
5639
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
27 octobre 2021

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.
Messages postés
11066
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
1 787
Pas de quoi :-).
À noter que sans sscanf(), il y avait aussi la possibilité d'utiliser strtok() :-).
Messages postés
61
Date d'inscription
mardi 7 mai 2013
Statut
Membre
Dernière intervention
3 juin 2017
2
Je vous remercie.