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

Résolu/Fermé
nemo1310 Messages postés 61 Date d'inscription mardi 7 mai 2013 Statut Membre Dernière intervention 3 juin 2017 - 16 févr. 2016 à 02:58
nemo1310 Messages postés 61 Date d'inscription mardi 7 mai 2013 Statut Membre Dernière intervention 3 juin 2017 - 20 févr. 2016 à 04:02
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

A voir également:

1 réponse

Dalfab Messages postés 706 Date d'inscription dimanche 7 février 2016 Statut Membre Dernière intervention 2 novembre 2023 101
16 févr. 2016 à 08:17
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
[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 1 083
16 févr. 2016 à 10:28
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
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
16 févr. 2016 à 14:12
D'ailleurs, un %99 serait mieux :-).
0
[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 1 083
16 févr. 2016 à 14:19
oui, merci fiddy.. à 3 on va y arriver :-P
0
Dalfab Messages postés 706 Date d'inscription dimanche 7 février 2016 Statut Membre Dernière intervention 2 novembre 2023 101 > [Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024
16 févr. 2016 à 20:53
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
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
16 févr. 2016 à 21:43
Pas de quoi :-).
À noter que sans sscanf(), il y avait aussi la possibilité d'utiliser strtok() :-).
0