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 :

Reperage dans un fichier


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 1
    Par défaut Reperage dans un fichier
    Bonjour, voila je suis en L2 Informatique et je m'entraine personnellement à manipuler les fichiers, mais là j'avoue que je bloque vraiment, voici l'énoncé de mon problème :


    Un fichier contient :

    Italie ; Rome ; 39
    Espagne ; Madrid ; 34
    France ; Paris ; 33
    Cuba ; La Havane ; 53
    Russie ; Moscou ; 7
    Royaume-Uni ; Londres ; 44
    Turkmenistan ; Achgabat ; 993
    Etats unis ; Washington ; 1
    Australie ; Camberra ; 61
    Moldavie ; Chisinau ; 373
    Et moi je doit creer un programme en C qui detecte si une chaine (Exemple:"Espagne") est présent dans le fichier, avec "Espagne" c'est le cas!

    Et voila mon programme vous pouvez le tester il compile mais c'est pas encore ça !!
    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
     
    #include <errno.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #define PAYS "paysphone.bip"
    #define TAILLE 1000
     
    int main(void)
    {
      char ch[]="France";
      char chaine[TAILLE];
      char cara = 0;
      FILE *f_pays;
      f_pays = fopen(PAYS,"r");
      if(f_pays == NULL)
      {
        fprintf(stderr,"\n Erreur : Impossible de lire le fichier %s\n",PAYS);
        exit(EXIT_FAILURE);
      }
      else
      {
        int ind=0;
        while(ind !=1)
        {
          int i=0;
          while(i<strlen(chaine))
          {
    	chaine[i]=0;
    	i++;
          }
          i=0;
          while(!feof(f_pays))
          {
    	cara = fgetc(f_pays);
    	while(cara != ';')
    	{
     
    	  chaine[i]=cara;
    	  cara = fgetc(f_pays);
    	  i++;
    	}
    	printf("%s\n",chaine);
     
    	if(strcmp(ch,chaine) == 0)
    	{
    	  printf("%s et %s sont identiques\n",ch,chaine);
    	  ind = 1;
    	} 
     
    	while(cara != '\n')
    	{
    	  cara = fgetc(f_pays);
    	}
          }
        }
     
        fclose(f_pays);
      }
     
      return(EXIT_SUCCESS);
    }
    Merci beaucoup, j'espere que c'est pas trop long à lire

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 398
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 398
    Par défaut


    Tu devrais lire ligne par ligne avec fgets() pour commencer. Puis, peut-être faire un strstr() dans chaque ligne...

    Si l'emploi de ces fonctions sort du cadre de l'exercice, rien ne t'empêche de les recoder...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    - Erreur : tu fais strlen(chaine) alors que chaine n'a pas été initialisé. Le résultat est imprévisible.
    - L'utilisation de feof() n'est pas appropriée. Pour détecter la fin du fichier (ou une erreur) les fonctions de lecture renvoient un indicateur. De plus, tu fais ce test en début de boucle, mais si on arrive à la fin du fichier dans la boucle (où tu effectues de nombreuses lectures), que se passe-t-il ?

    Si tu tiens, dans ton exercice, à faire la lecture caractère par caractère, tu peux procéder en suivant ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    - Ouvrir le fichier
    - Si le fichier est correctement ouvert
      - Positionner l'indice d'écriture dans chaine à son début
      - Faire :
           - Lire une valeur sur le fichier (fgetc()) et la mettre dans un int cara (un int pour détecter la fin de fichier)
           - Si cara est différent de ';' et de ' ' et de '\n' et de EOF
              - Mettre cara dans chaine et incrémenter l'indice
           - Sinon 
              - Mettre '\0' dans chaine pour la terminer puis remettre l'indice d'écriture à 0
              - Faire la comparaison entre ch et chaine (strcmp())
        Et ce tant que cara est différent de EOF
      - Fermer le fichier.
    Ce code ignore les ' ', les ';' et les '\n' et les considère comme des séparateurs. Ainsi "Royaume-Uni" marchera , mais pas "Royaume Uni". Si on veut que les chaines puissent comporter des blancs, le problème se complique parce qu'il faut éliminer les blancs qui précèdent, les blancs qui suivent, mais pas ceux qui sont au milieu du mot.

Discussions similaires

  1. Lire un attribut dans un fichier XML en C++
    Par ti.k-nar dans le forum XML
    Réponses: 2
    Dernier message: 14/10/2002, 15h22
  2. Balises HTML dans un fichier XML
    Par Bastet79 dans le forum XML/XSL et SOAP
    Réponses: 12
    Dernier message: 04/09/2002, 15h29
  3. Sauvegarder une surface dans un fichier
    Par Freakazoid dans le forum DirectX
    Réponses: 6
    Dernier message: 18/08/2002, 15h23
  4. séparateurs dans un fichier
    Par manuhard dans le forum Langage
    Réponses: 5
    Dernier message: 13/08/2002, 11h30
  5. enregistrer dans un fichier avec une appli mdi
    Par ferrari dans le forum C++Builder
    Réponses: 4
    Dernier message: 05/05/2002, 15h17

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