Tester si une valeur existe dans un fichier
Répondre à la discussion
Affichage des résultats 1 à 8 sur 8

Tester si une valeur existe dans un fichier



  1. #1
    invite074048f2

    Tester si une valeur existe dans un fichier


    ------

    Bonjour,
    je voulais tester si une valeur existe dans un fichier en langage C je ne sais pas comment faire quelqu'un peut m'aider svp

    -----

  2. #2
    invite4492c379

    Re : Tester si une valeur existe dans un fichier

    Hello,

    l'algo général pour faire ça est

    *ouvrir le fichier
    * tant qu'on a pas atteint la fin du fichier et pas trouvé la valeur
    ** lire le fichier
    ** chercher la valeur
    *ferner le fichier

    Quels problèmes rencontres-tu ? As-tu des cours de C ? Que contient le fichier ? Quelle genre de valeur cherches-tu (entier, flottant, mots, phrase) ?

  3. #3
    invite074048f2

    Re : Tester si une valeur existe dans un fichier

    je fait ça .
    Code:
    FILE *file1;  
         file1 = fopen("fichier1.txt", "r");
      
           printf("les chambres reservers\n");
        	while (car != EOF) 
                    	{
                            
                 	         printf("%c", car); 
              	             
                      	       b=(char)car;
                      	       tab[i]=b;
      	                       car = fgetc(file1); 
      	                       i++;
                       	}
     
        fclose(file1);
    j'ouvre le fichier qui contient des entier une par ligne et je rempli ensuit mon tableau par ces entier la le probleme c'est qu' il faut tjrs caster la ligne en char si nn le tableau seras rempli par des num qui n'existe pas (comme l'adresse du pointeur) et apres je test si les valeur du tableau = une autre val comme ça



    Code:
     for(i=0;i<100;i++){
             if(tab[i]==str){
                         
                      print("fghjkl");
                             }
                          
                             }
    mais il ne fonctionne pas j'ai essaye le strcmp et elle aussi non
    vous pouvez m'aider ??
    Dernière modification par gienas ; 13/01/2012 à 18h51. Motif: Ajouté les balise code, obligatoires pour les programmes

  4. #4
    invite4492c379

    Re : Tester si une valeur existe dans un fichier

    Bon plusieurs choses à faire :

    1. respirer profondément
    2. mettre des balises codes
    3. revoir les cours de C

    Peux-tu me décrire ce que contient le fichier (quelques lignes du début) et ce que tu cherches dedans (un nombre ?) ? Tu me dis lire des entiers mais ensuite tu essayes d'utiliser strcmp fait pour comparer des string ... c'est un peu confus.

  5. A voir en vidéo sur Futura
  6. #5
    invite074048f2

    Re : Tester si une valeur existe dans un fichier

    comme je vous ai dit le fichier contient des entier comme ça : 1
    2
    3

    pourquoi je vous ai dit strcmp parce que quand je rempli le tableau sans caster les valeur de fichier récupérer en (char) le tableau stocke des valeur comme 13345544 alors qu'est ce que j'ai fait j'ai casté les valeur en char et le tableau est declarer char *tab[100]; puisque en parle maintenant des chaine de caractère c'est logique aue je met un strcmp pour comparer .vous m'avez compris mnt

  7. #6
    invite4492c379

    Re : Tester si une valeur existe dans un fichier

    Alors si ton fichier contient un entier par ligne, le plus simple est d'utiliser fscanf. Tu peux trouver un exemple intéressant sur http://www.areaprog.com/c/cours-259-...8e04eb0ec4d4c1 et de la doc sur fscanf sur http://www.siteduzero.com/tutoriel-3...html#ss_part_2.

    Ensuite pas le peine de stocker tout le fichier dans un tableau, il suffit de lire une entier, s'il s'agit de la valeur cherchée : c'est fini tu l'as trouvée, si tu arrives en fichier de fichier sans trouver la valeur c'est qu'elle n'est pas dans le fichier.

  8. #7
    invite4492c379

    Re : Tester si une valeur existe dans un fichier

    Comme tu m'as l'air bien perdu, nous allons essayer de le faire pas à pas ...

    Je te propose d'abord de mettre dans une variable filename le nom du fichier, cette variable aura donc pour type char*. Une autre variable va contenir la valeur que tu chercheras dans le fichier, je la nomme valeur, elle sera donc de type int. Comme on doit accéder au contenu d'un fichier nous allons aussi avoir besoin d'une variable de type FILE* que nous nommerons file.

    une début de code pourra être :
    Code:
    #include <stdio.h>
    
    int main()
    {
      char* filename="chemin et nom du fichier";
      int valeur=12; /* par exemple */
    
      FILE* file;
    }
    Pour ouvrir un fichier et l'utiliser via une variable de type FILE* il faut utiliser fopen. La doc de fopen nous dit qu'il faut passer deux paramètre, le nom du fichier de type char* et un mode d'ouverture de type char* aussi. Cette fonction renvoie soit la valeur NULL (dans ce cas le fichier n'a pas pu être ouvert) ou une autre valeur (dans ce cas le fichier a pu être ouvert et est utilisable). Nous allons gérer simplement l'erreur en ouverture :
    Code:
    #include <stdio.h>
    
    int main()
    {
      char* filename="chemin et nom du fichier";
      int valeur=12; /* par exemple */
    
      FILE* file;
      file=fopen(filename,"r"); /* nous ne faisons que lire le fichier */
      if (file==NULL) { /* une erreur est survenue */
        printf("Le fichier %s n'a pas pu être ouvert\n",filename);
      } else { /* le fichier est ouvert : on peut y aller */
        ...
      }
    }
    Maintenant nous allons remplacer les ... par le code qui cherche une valeur dans le fichier.
    Nous allons utiliser une variable qui indiquera si nous avons trouvé la valeur ou pas. Nommons la found, elle sera de type int, elle vaudra 0 par défaut et si nous trouvons la valeur alors nous la positionnerons à 1. Il nous faudra aussi une variable entière qui contiendra la valeur lue dans le fichier, nommons la valeurLue.
    L'algorithme que nous utiliserons sera classique :
    Code:
    tant que (found==0) et (non fin de fichier)
      lire valeurLue dans fichier
      si valeurLue==valeur alors 
        found=1
      fin si
    fin tant que
    ce qui peut se traduire en :

    Code:
    #include <stdio.h>
    
    int main()
    {
      char* filename="chemin et nom du fichier";
      int valeur=12; /* par exemple */
      int valeurLue;
      int found;
    
      FILE* file;
      file=fopen(filename,"r"); /* nous ne faisons que lire le fichier */
      if (file==NULL) { /* une erreur est survenue */
        printf("Le fichier %s n'a pas pu être ouvert\n",filename);
      } else { /* le fichier est ouvert : on peut y aller */
        found=0;
        while ( (found==0) && (!feof(file)) ) {
          fscanf(file,"%d",&valeurLue);
          if (valeurLue==valeur)
            found=1;
        }
      }
    }
    En regardant la doc de fscanf/scanf de plus près on apprend que ces fontions renvoient une valeur qui est le nombre de variables lues avec succès. En gros si fscanf renvoie une valeur différente de 1, valeurLue ne contiendra pas une valeur correcte. Ajoutons un test pour ça :

    Code:
    #include <stdio.h>
    
    int main()
    {
      char* filename="chemin et nom du fichier";
      int valeur=12; /* par exemple */
      int valeurLue;
      int found;
    
      FILE* file;
      file=fopen(filename,"r"); /* nous ne faisons que lire le fichier */
      if (file==NULL) { /* une erreur est survenue */
        printf("Le fichier %s n'a pas pu être ouvert\n",filename);
      } else { /* le fichier est ouvert : on peut y aller */
       found=0;
        while ( (found==0) && (!feof(file)) ) {
          if (fscanf(file,"%d",&valeurLue)==1)
            if (valeurLue==valeur)
              found=1;
        }
      }
    }
    Je teste la valeur de retour de fscanf directement sans la stocker dans une variable intermédiaire.

    Il ne reste plus qu'à terminer en fermant le fichier et en affichant le résultat :


    Code:
    #include <stdio.h>
    
    int main()
    {
      char* filename="chemin et nom du fichier";
      int valeur=12; /* par exemple */
      int valeurLue;
      int found;
    
      FILE* file;
      file=fopen(filename,"r"); /* nous ne faisons que lire le fichier */
      if (file==NULL) { /* une erreur est survenue */
        printf("Le fichier %s n'a pas pu être ouvert\n",filename);
      } else { /* le fichier est ouvert : on peut y aller */
       found=0;
        while ( (found==0) && (!feof(file)) ) {
         if (fscanf(file,"%d",&valeurLue)==1)
            if (valeurLue==valeur)
              found=1;
        }
        fclose(file);
        if (found==1)
          printf("La valeur %d a été trouvée dans le fichier '%s'\n", valeur, filename);
        else 
          printf("La valeur %d n'a pas été trouvée dans le fichier '%s'\n", valeur, filename);
      }
    }
    Encore une toute dernière chose : main est une fonction qui renvoie un int. Par convention il renvoie 0 si tout est OK, une autre valeur pour signaler une erreur (ou autre chose, un état, un résultat, ...). Pour cet exemple nous allons simplement renvoyer 0 si la valeur n'a pas été trouvée, 1 si elle a été trouvée et -1 s'il y a eu une erreur.

    Code:
    #include <stdio.h>
    
    int main()
    {
      char* filename="chemin et nom du fichier";
      int valeur=12; /* par exemple */
      int valeurLue;
      int found;
      int resultat;
    
      FILE* file;
      file=fopen(filename,"r"); /* nous ne faisons que lire le fichier */
      if (file==NULL) { /* une erreur est survenue */
        printf("Le fichier %s n'a pas pu être ouvert\n",filename);
        resultat=-1;
      } else { /* le fichier est ouvert : on peut y aller */
        found=0;
        while ( (found==0) && (!feof(file)) ) {
         if (fscanf(file,"%d",&valeurLue)==1)
            if (valeurLue==valeur)
              found=1;
        }
       fclose(file);
        if (found==1) {
          printf("La valeur %d a été trouvée dans le fichier '%s'\n", valeur, filename);
          resultat=1;
        } else {
          printf("La valeur %d n'a pas été trouvée dans le fichier '%s'\n", valeur, filename);
          resultat=0;
        }
      }
    
      return resultat;
    }
    Je t'encourage évidemment à consulter la doc, surtout celle qui traite de scanf/fscanf, comment traiter un fichie et surtout faire des tutos aussi bien sur C que sur les algos basiques.

  9. #8
    invite074048f2

    Re : Tester si une valeur existe dans un fichier

    Merci infiniment ça a marche

Discussions similaires

  1. Equation: montrer qu'il existe une solution dans ]0;1[
    Par invitef5c95f51 dans le forum Mathématiques du supérieur
    Réponses: 2
    Dernier message: 06/05/2011, 17h43
  2. problème insertion fichier .txt dans une allocation dynamique
    Par invitef838f58f dans le forum Programmation et langages, Algorithmique
    Réponses: 9
    Dernier message: 09/01/2011, 19h32
  3. Aller cocher une checkbox dans un fichier fermé
    Par invite1e5716ed dans le forum Logiciel - Software - Open Source
    Réponses: 0
    Dernier message: 19/05/2008, 15h51
  4. transfert fichier dans une eeprom
    Par invitefe2e9cb2 dans le forum Électronique
    Réponses: 22
    Dernier message: 17/06/2006, 01h08
  5. Un fichier Hex pour tester mes 16F84A
    Par inviteeddea82a dans le forum Électronique
    Réponses: 4
    Dernier message: 26/10/2003, 22h24