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

A voir également:

1 réponse

Dalfab Messages postés 706 Date d'inscription   Statut Membre Dernière intervention   101
 
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 6205 Date d'inscription   Statut Contributeur Dernière intervention   1 105
 
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   Statut Contributeur Dernière intervention   1 846
 
D'ailleurs, un %99 serait mieux :-).
0
[Dal] Messages postés 6205 Date d'inscription   Statut Contributeur Dernière intervention   1 105
 
oui, merci fiddy.. à 3 on va y arriver :-P
0
Dalfab Messages postés 706 Date d'inscription   Statut Membre Dernière intervention   101 > [Dal] Messages postés 6205 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
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Pas de quoi :-).
À noter que sans sscanf(), il y avait aussi la possibilité d'utiliser strtok() :-).
0