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 :

Recherche dans fichier pour inventaire


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2015
    Messages : 41
    Par défaut Recherche dans fichier pour inventaire
    Bonjour,
    j'essaie de créer une application pour faire l'inventaire sur une douchette de chez opticon.
    Mais le problème est que quand je scan un code barre j'appelle une fonction qui me dis si le code barre existe dans un fichier (que je charge sur la douchette).
    la fonction me renvoie un message qui me dis que le code barre existe alors que dans le fichier il y est pas.
    Quand je trouve mon code barre dans le fichier je demande de me l'afficher est a chaque fois j'obtiens ce code barre :
    2600003264997 alors que c'est pas celui qui est scanner.
    le code barre pour le quelle j'obtient le problème est le : 20173852

    Fichier source : ( fichier .txt)
    0000000000032
    0000000000048
    2600003264997
    2600003298466
    2600003315361

    Fonction de recherche
    Code C : 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
     
    int getbarcode( char barcode)
    {
    	FILE *fichier = NULL;
    	fichier = fopen(fichier_source[0], "r");
    	int traitement=-1;
    	 if (fichier != NULL)
        {
    		char line [ TAILLE_MAX ]; /* or other suitable maximum line size */
    		while ( fgets ( line, sizeof line, fichier ) != NULL ) /* read a line */
    		{
    			if ( *line == barcode)
    			{	
    				printf("\n%s",line);
    				traitement = 1;
    				break;
    			}
    		}
            fclose(fichier);
        }
        else
        {
            // On affiche un message d'erreur si on veut
            printf("\nImpossible d'ouvrir le fichier");
        }
     
     
    	return traitement;	
    }


    Fonction qui scan le code barre et appel la fonction de recherche
    Code C : 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
     
     
    void scancodebarre( void )
    {
        putchar('\f');
        printf("Scanner code barre");
     
    	int key;
        char string[ 40+1 ];
        int codeId;
    	char barcode = 0;
     
     
    	FILE* fichier = NULL;
    	fichier = fopen("INVENT.txt", "w");
        for(;;)
        {
            string[0] = '\0';
            printf("\fEcrit ou scan..");
            key = ScanOrKeyboardInputSymbol( string, 1, 13, INPUT_NUM, 0, 1, 14, &codeId );
            switch( key )
            {
                case KEYBOARD:
                    barcode  =  string[0];
    				// printf("\n");
    				// fprintf(fichier,"%d;1\n",barcode);
    				// printf("%d;1\n",barcode);
                    break;
                case SCANNED:
                    barcode  =  string[0];
    				// printf("\n");
    				// fprintf(fichier,"%d;1\n",barcode);
    				// printf("%d;1\n",barcode);
                    break;
                default:
                    break;
            }
    		resetkey();
    		int traitement = -1;
    		traitement = getbarcode(barcode);
    		if (traitement == 0)
    		{
    			printf("\ncode barre inconnu");
    		} 
    		else if (traitement ==1)
    		{
    			printf("\ncode barre connu");
    		} 
    		resetkey();
    		WaitForKey();
     
    		if(KeyboardInput(string,1,40,INPUT_ALL,0,1,14,2,CLR_KEY,ENT_KEY) == CLR_KEY){
    			break;
    		}
     
        }
     
    	fclose(fichier);
    	printf("\fFin inventaire");
        WaitForKey();
    }
    est ce que vous pouvez m'aider a comprendre pourquoi j'ai ce problème ?
    j'ai aussi un autre problème qui est que j'ai le choix de scanner ou d'écrire le code barre mais quand j'écris le code barre je n'est pas de message qui me dis si le code barre existe ou pas.

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 152
    Billets dans le blog
    4
    Par défaut
    String étant ton code-barre scanné, ta fonction ne fait que vérifier que le premier caractère correspond..
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2015
    Messages : 41
    Par défaut
    D'accord ,
    que dois-je passer a la fonction getbarcode pour qu'elle compare tous mon code barre et non le 1er caractère.

  4. #4
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    Billets dans le blog
    1
    Par défaut
    Une chaîne de caractères et non simplement un caractère

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2015
    Messages : 41
    Par défaut
    D'accord ,
    si j'ai bien compris je dois lui passer un tableau de char. Donc la fonction getbarcode doit ressembler à ceci :

    Code C : 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
     
    int getbarcode(char barcode[])
    {
    	printf("\n\n%s;\n", barcode);
    	FILE *fichier = NULL;
    	fichier = fopen(fichier_source, "r");
    	int traitement=0;
    	 if (fichier != NULL)
        {
    		char line [ TAILLE_MAX ]; /* or other suitable maximum line size */
    		while ( fgets ( line, sizeof line, fichier ) != NULL ) /* read a line */
    		{
    			if ( line == barcode)
    			{
    				traitement = 1;
    				break;
    			}
    		}
            fclose(fichier);
        }
        else
        {
            // On affiche un message d'erreur si on veut
            printf("\nImpossible d'ouvrir le fichier");
        }
    	return traitement;	
    }

  6. #6
    Membre Expert Avatar de edgarjacobs
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2011
    Messages : 786
    Par défaut
    Hello,

    Deux choses:

    1) la comparaison de deux strings en C se fait en utilisant (entre autres) strcmp(), pas ==. Ce que tu fais dans ton code, c'est comparer les adresses des variables

    2) fgets() va mettre le \n dans la ligne lue, tu dois le supprimer sinon la comparaison avec barcode ne sera jamais vraie (sauf si il y a également un \n à la fin de barcode, évidemment)

  7. #7
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 835
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par gtapes Voir le message
    Code C : 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
    int getbarcode( char barcode /* le codebarre ne fait donc qu'un seul caractère !!! */)
    {
    	FILE *fichier = NULL;
    	fichier = fopen(fichier_source[0], "r");
    	int traitement=-1;
    	 if (fichier != NULL)
        {
    		char line [ TAILLE_MAX ]; /* or other suitable maximum line size */
    		while ( fgets ( line, sizeof line, fichier ) != NULL ) /* read a line */
    		{
    			if ( *line == barcode)  // Ben oui, comparer *line (le premier caractère de la varaible "line") avec le caractère placé dans "barcode" a de grandes chances de trouver une correspondance
    			{	
    				printf("\n%s",line);
    				traitement = 1;
    				break;
    			}
    		}
            fclose(fichier);
        }
        else
        {
            // On affiche un message d'erreur si on veut
            printf("\nImpossible d'ouvrir le fichier");
        }
    	
    	
    	return traitement;	
    }
    est ce que vous pouvez m'aider a comprendre pourquoi j'ai ce problème ?
    Bonjour
    Voir mes commentaires en rouge dans ton code. Tu devrais aller réouvrir ton cours sur le chapitre des chaines de caractères...

    Citation Envoyé par gtapes Voir le message
    que dois-je passer a la fonction getbarcode pour qu'elle compare tous mon code barre et non le 1er caractère.
    Sais pas trop. Ptet que lui passer tout le codebarre à comparer serait une idée à creuser...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

Discussions similaires

  1. Besoin d'aide écriture dans fichier
    Par boniface dans le forum Modules
    Réponses: 3
    Dernier message: 29/01/2007, 18h06
  2. Recherche dans fichier
    Par Débéa dans le forum Général Python
    Réponses: 2
    Dernier message: 26/07/2006, 14h51
  3. recherche dans fichier xml
    Par piro dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 24/03/2006, 08h11
  4. Réponses: 4
    Dernier message: 28/10/2005, 09h59
  5. Recherche dans fichiers
    Par Tchinkatchuk dans le forum Linux
    Réponses: 2
    Dernier message: 17/06/2005, 10h32

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