IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

extraire une chaine de caractères


Sujet :

C

  1. #1
    Nouveau membre du Club
    Inscrit en
    Avril 2006
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 50
    Points : 28
    Points
    28
    Par défaut extraire une chaine de caractères
    Bonjour,
    Je souhaite écrire une fonction qui extrait un chaine de caractères du début jusqu'au premier espace (exemple : je rentre dans ma fonction "salut developpez.com" et elle me renvoit "salut" ).

    J'ai tout essayé mais rien ne fonctionne. Mon main est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    int main(int argc , char *argv[]) {
       char ligne[256];
       char InstP[256];
       FILE *fProg = fopen( argv[2], "rt" ); /* ouvre en lecture */
       if (fProg==NULL) {
         printf("erreur d'ouverture sur le fichier %s/n",argv[2]);
         return 1;        /* sort du programme (code erreur 1) */
       }
       while (fgets( ligne, 256, fProg ) != NULL) { /* essai lecture ligne */
           InstP=extraire_code(ligne);
           n++;
       }
       fclose(fProg);  /* ferme le fichier */
       return 0;
    }
    Savez vous comment réaliser cette fonction extraire_code pour qu'elle me renvoit le debut de ma chaine (jusqu'au premier espace)?

    Merci beaucoup !
    A+ Julie

  2. #2
    Membre actif
    Avatar de odsen.s
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2006
    Messages
    269
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2006
    Messages : 269
    Points : 243
    Points
    243
    Par défaut
    Salut

    J'ai un peu de mal à saisir le but recherché.
    Tu veux construire une fonction qui, quand on lui passe une chaîne de caractères "abcd efgh ijkl" copie dans une chaîne vierge "abcd" ?

    Si c'est bien ça, je ne comprends pas bien ton code.
    Pourquoi ouvres-tu et lis-tu un fichier ?

    Avec plus d'explications sur le but recherché, ça sera plus simple de t'aider

  3. #3
    Membre éclairé Avatar de stephl
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2007
    Messages : 643
    Points : 771
    Points
    771
    Par défaut
    fscanf(...,"%s",...) ou sscanf(...,"%s",...)

  4. #4
    Nouveau membre du Club
    Inscrit en
    Avril 2006
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 50
    Points : 28
    Points
    28
    Par défaut Explication code
    Salut,
    Merci pour vos réponses.
    En fait, je passe en argument de mon programme 2 fichiers texte.
    Je souhaite comparer le premier mot de chaque ligne du fichier 1 avec le premier mot de chaque ligne du fichier 2.
    Donc, je souhaite extraire le premier mot (et le sotcker dan InstP), faire de meme avec l autre fichier (stocké dans InstF par ex) puis utiliser strcmp pour voir si InstF et InstP sont egaux.
    Voila.
    C est un poil plus clair?
    Merci

  5. #5
    Membre éclairé Avatar de stephl
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2007
    Messages : 643
    Points : 771
    Points
    771
    Par défaut
    fscanf(...,"%s",...) et sscanf(...,"%s",...) permettent de lire mot par mot réciproquement dans un fichier et dans une chaîne.

  6. #6
    Nouveau membre du Club
    Inscrit en
    Avril 2006
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 50
    Points : 28
    Points
    28
    Par défaut Solution
    Salut,
    J'ai réussi a faire ce que je voulais avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    char ligne[256];
    FILE *fProg = fopen( argv[2], "rt" ); /* ouvre en lecture */
     
    while(!feof(fProg)) {
            fscanf(fProg, "%s", &ligne);
            printf("chaine  : %s\n",ligne);
            i++;
    }
    Merci pour l'aide!

  7. #7
    Membre éclairé Avatar de stephl
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2007
    Messages : 643
    Points : 771
    Points
    771
    Par défaut
    La solution avec fscanf() est simple. Attention cependant aux dépassements. Votre code suppose qu'un mot du fichier n'a pas plus de 255 caractères. Une utilisation plus sûre de fscanf() serait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fscanf(fProg, "%255s", ligne);
    Notez qu'il n'y a pas de '&' devant "ligne" normalement.

  8. #8
    Nouveau membre du Club
    Inscrit en
    Avril 2006
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 50
    Points : 28
    Points
    28
    Par défaut
    Ok, j'enleve le &.
    Comment puis je savoir maintenant si le mot obtenu est en debut de ligne?
    Car si dans mon fichier j'ai :

    salut les gens!
    Ca va?

    Moi je voudrais savoir si le mot que je viens de recupérer avec fscanf c'est le premier de la ligne (donc salut ou Ca).
    Comment puis je faire?

  9. #9
    Membre éclairé Avatar de stephl
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2007
    Messages : 643
    Points : 771
    Points
    771
    Par défaut
    Une solution consiste à lire la ligne entièrement (comme vous le faisiez avec fgets()). Ensuite, vous pouvez utilisez sscanf() pour obtenir le premier mot dans la chaîne lue.

  10. #10
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par nopnop
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    while(!feof(fProg)) {
            fscanf(fProg, "%s", ligne);
    Merci pour l'aide!
    feof() ne fait pas ce que tu crois. Pour détecter la fin de lecture, il faut tester la valeur retournée par la fonction de lecture (je recommande fgets()).

    http://emmanuel-delahaye.developpez....s.htm#fichiers
    Pas de Wi-Fi à la maison : CPL

  11. #11
    Nouveau membre du Club
    Inscrit en
    Avril 2006
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 50
    Points : 28
    Points
    28
    Par défaut
    J'ai essayé de combiner toutes vos remarques et j'obtiens le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
       while (fgets( ligne, 256, fProg ) != NULL) { /* essai lecture ligne */
           sscanf(ligne,"%s",arg);
           printf(arg); //arg contient le premier mot de chaque ligne du fichier
           n++;
       }
    Ceci marche parfaitement et réalise ce que je voulais.
    Merci pour les conseils.

  12. #12
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par nopnop
    J'ai essayé de combiner toutes vos remarques et j'obtiens le code : <...> Ceci marche parfaitement et réalise ce que je voulais.
    OK, mais je préfèrerais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
       char ligne [256];
       char arg [sizeof ligne];
       unsigned long n = 0;
       /* essai lecture ligne */
       while (fgets (ligne, sizeof ligne, fProg ) != NULL) 
       {
           sscanf (ligne,"%s",arg);
           /* arg contient le premier mot de chaque ligne du fichier */
           printf(arg); 
           n++;
       }
    Pas de Wi-Fi à la maison : CPL

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. extraire une chaine de caractère dans un cdata
    Par arnoldlayne dans le forum XSL/XSLT/XPATH
    Réponses: 0
    Dernier message: 11/03/2010, 10h09
  2. extraire une chaine de caractère
    Par john_wili dans le forum Débuter
    Réponses: 5
    Dernier message: 15/04/2009, 10h23
  3. extraire une chaine de caractères
    Par Stéph utilisateur d'acces dans le forum Excel
    Réponses: 6
    Dernier message: 06/03/2009, 13h15
  4. Extraire une chaine de caractères
    Par Sam_Dalembert dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 18/08/2008, 11h58
  5. Extraire une chaine de caractéres
    Par fatati dans le forum Oracle
    Réponses: 4
    Dernier message: 30/01/2007, 14h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo