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 :

Comparaison variable avec ligne d'un fichier texte


Sujet :

C

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 20
    Points : 10
    Points
    10
    Par défaut Comparaison variable avec ligne d'un fichier texte
    Bonjour,

    Je suis dans une impasse depuis quelques jours sur un petit programme qui récupère un fichier texte qui contient un mot sur chaque ligne et qui ensuite compare une variable (char(mot)) avec chacune de ces lignes.
    Si une de ces lignes correspond à la variable alors il y a un message X qui est affiché, au contraire, il y a un message Y.

    Voici le code :

    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
     
        int ch;
        char mot[] = "test";
     
        FILE *fichier;
        fichier = fopen("C:\\Users\\XXXX\\Desktop\\Fichier_texte.txt", "r");
        if (fichier){
            while ((ch = getc(fichier)) != EOF)
                putchar(ch);
                fclose(fichier);
                if (strcmp(mot, ch) == 0) {
                    printf("OK");
                }
                else {
                    printf("Erreur");
            }
        }
    Problème, quand je compare le char mot avec ch (qui récupère le contenu du fichier), le programme lit les lignes et les affiche mais quand il doit faire la comparaison, il y a un crash.
    Je ne sais pas quoi faire pour comparer les lignes avec la variable "mot"...

    Merci bien,

  2. #2
    Expert confirmé
    Avatar de TiranusKBX
    Homme Profil pro
    Développeur C, C++, C#, Python, PHP, HTML, JS, Laravel, Vue.js
    Inscrit en
    Avril 2013
    Messages
    1 476
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur C, C++, C#, Python, PHP, HTML, JS, Laravel, Vue.js
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 1 476
    Points : 4 806
    Points
    4 806
    Billets dans le blog
    6
    Par défaut
    moi je la vois la raison de ton problème
    pourquoi compare tu un entier avec une chaîne de caractère ?
    et surtout pourquoi tu met un caractère dans un entier ?
    je veut bien que dans le C tu peut faire des trucs bourrins mais la ...

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 20
    Points : 10
    Points
    10
    Par défaut
    Ai-je le droit de rejeter cette erreur sur mon amateurisme ?
    Je me suis dit que comme il recevait le contenu, il pouvait y avoir comparaison...

    J'ai essayé plusieurs autres méthodes pour la comparaison, mais rien n'y fait je n'y arrive pas...

  4. #4
    Expert confirmé
    Avatar de TiranusKBX
    Homme Profil pro
    Développeur C, C++, C#, Python, PHP, HTML, JS, Laravel, Vue.js
    Inscrit en
    Avril 2013
    Messages
    1 476
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur C, C++, C#, Python, PHP, HTML, JS, Laravel, Vue.js
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 1 476
    Points : 4 806
    Points
    4 806
    Billets dans le blog
    6
    Par défaut
    personnellement je suis un peut rouillé niveau C mais si tu te base sur ça ça peut aider http://www.programmingsimplified.com...gram-read-file
    pour ce qui concerne la lecture d'une page web la je suis trop rouillé en C pour t'aider plus

  5. #5
    Membre chevronné
    Avatar de sambia39
    Homme Profil pro
    No Comment
    Inscrit en
    Mai 2010
    Messages
    548
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : No Comment
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mai 2010
    Messages : 548
    Points : 1 753
    Points
    1 753
    Par défaut
    Bonjour
    Citation Envoyé par TiranusKBX Voir le message
    moi je la vois la raison de ton problème
    pourquoi compare tu un entier avec une chaîne de caractère ?
    et surtout pourquoi tu met un caractère dans un entier ?
    je veut bien que dans le C tu peut faire des trucs bourrins mais la ...
    Personnellement, je n'ai pas compris plus et je ne vois pas précisément où l'on compare un mot ? ou un entier, car la boucle s'arrête à cause de la fonction fclose qui ferme le fichier.
    Pour ma part le problème est d'ordre algorithmique qu'il faut revoir.
    à bientôt

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 20
    Points : 10
    Points
    10
    Par défaut
    Merci de vos réponses.
    Je compare les variables avec la fonction strcmp...

    Je vais essayer 2/3 choses, je vous tiens au courant !

  7. #7
    Membre éclairé
    Avatar de Elijha
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Avril 2003
    Messages
    314
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Avril 2003
    Messages : 314
    Points : 742
    Points
    742
    Par défaut
    Bonjour,

    Si tu veux lire un mot par ligne, je te conseillerai d'utiliser la fonction fgets(...). Comme cela ta comparaison de chaine sera correcte. Pour l'instant tu essayes de comparer un mot avec un caractère. La fonction strcmp te répondra toujours faux.

    Nota: Attention, la fonction fgets te retourne aussi le caractère de retour-chariot "\n". Il faut le supprimer avant de faire le test avec la fonction strcmp.

  8. #8
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 721
    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 721
    Points : 31 044
    Points
    31 044
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Enix13 Voir le message
    Je compare les variables avec la fonction strcmp...

    Je vais essayer 2/3 choses, je vous tiens au courant !
    Avant d'essayer 2/3 choses (au hasard?), il convient de bien comprendre les bases.

    Le C ne sait gérer que des nombres. Ces nombres peuvent être codés sur 8 bits (de 0 à 255), 16 bits (de 0 à 65535), 32 ou 64 bits. Chaque codage possède un nom (8 bits c'est "char", 16 bits c'est "short", 32 bits c'est "long", etc).

    Ces nombres peuvent être comparés deux à deux indépendamment de leur codage individuel. La comparaison créera un codage "temporaire" afin que les deux nombres soient pareils durant la comparaison. Exemple: comparer 100 codé sur un char avec 100 codé sur un short transformera le char en short en rajoutant des "0" pour remplir les bits non utilisés. Accessoirement la notation "caractère" avec des quotes simples transforme le caractère en valeur numérique correspondant à sa valeur ascii. Ainsi 'a' c'est 65, 'b' c'est 66 etc.
    Ainsi tu peux trouver des trucs du type if (ch == 'a') qui reste une comparaison numérique. Mais qu'elle soit numérique n'empêche pas 'a' de rester toujours égal à 'b' - 1 et 'b' - 'a' reste une opération numérique qui vaut 1.

    Une chaine de caractères est un truc déjà trop compliqué pour le C. Il ne sait pas la gérer. Pour pouvoir tout de même les utiliser, il est nécessaire de stocker les caractères de la chaine dans un tableau. Et pour pouvoir savoir où se finit ladite chaine, il faut terminer le tableau avec un caractère en dehors des caractères alphanumériques usuels (pour ne pas le confondre). N'importe lequel peut convenir mais le plus simple est d'utiliser le caractère de valeur ascii 0 noté aussi '\0' (qu'il ne faut pas confondre avec le caractère '0' ayant la valeur ascii 48).
    Partant de là, comparer deux chaines se fait en comparant deux à deux chaque caractère des deux chaines (le premier de la première avec le premier de la seconde, le second de la première avec le second de la seconde, etc). Et on s'arrête dès qu'il y en a un qui diffère. Et si aucun ne diffère, on s'arrêtera alors quand-même au '\0' qu'on sait pouvoir trouver.
    Ce genre d'algo est très simple à implémenter. Mais il est tellement usuel qu'il est fourni avec la librairie sous forme de fonction déjà programmée: strcmp(). Mais cette fonction ne peut fonctionner que si les éléments qu'on lui donne sont des chaines c'est à dire des tableaux de caractères dont au-moins l'un d'entre eux vaut '\0'...

Discussions similaires

  1. [Batch] Mettre une ligne d'un fichier texte dans une variable
    Par guiguir68 dans le forum Scripts/Batch
    Réponses: 2
    Dernier message: 21/08/2014, 16h45
  2. nombre de valeurs variable par ligne d'un fichier texte
    Par Christinita dans le forum MATLAB
    Réponses: 3
    Dernier message: 15/02/2012, 22h05
  3. Comparaison de ligne dans un fichier texte
    Par babynewton dans le forum MATLAB
    Réponses: 21
    Dernier message: 13/02/2012, 19h09
  4. Réponses: 20
    Dernier message: 09/02/2006, 09h45
  5. Réponses: 2
    Dernier message: 02/03/2004, 19h38

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