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 :

lecture d'un txt


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    amateur
    Inscrit en
    Octobre 2007
    Messages
    731
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : amateur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 731
    Par défaut lecture d'un txt
    bonjour,

    J'ai enregistré dans un txt les code couleurs d'une image.
    J'aurais besoin de les passer en paramètre à la fonction setpixel.
    Le problème c'est que je ne sais pas comment faire pour les récupérer.
    Je sais qu'il faut utiliser fscanf mais de là à l'utiliser correctement...

    le fichier texte est rangé ainsi :

    ...
    14189931
    14189931
    13992299
    13859693
    13925746
    13793904
    13596530
    13596530
    13991284
    13991284
    14188405
    ...

    Comment faire pour que cela lise tout le fichier et qu'il fasse de chaque ligne le code couleur à afficher ?

    Le programme pourrait se dérouler ainsi.

    :BOUCLE tant que le fichier n'est pas completement lu.
    lecture du fichier
    i-eme code couleur
    affichage du i-eme pixel de i-eme code couleur
    @boucle


    Merci d'avance.

  2. #2
    Membre très actif
    Avatar de TheDrev
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    310
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 310
    Par défaut
    Salut, tu peut utiliser fgetc qui prend un FILE* et renvoie en char.


    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
     
        FILE *p_file = NULL;
        char c;
     
        p_file = fopen("mon_fichier.txt", "rb");
        if (p_file == NULL)
        {
            fprintf(stderr, "failed ...");
            exit (EXIT_FAILURE);
        }
     
    while ((c = fgetc(p_file)) != EOF)
    {
        /* ... utilisation du caractere lu */
     
    }
     
    if (feof(p_file))
        printf("Fin de fichier.\n");

    Pour fscanf ca marche comme pour un scanf mais l'entree n'est pas l'entree standard mais un FILE*

    int fscanf(FILE *stream, const char *format, ...);

    tu peut donc tout a fait t'en servir a la place de fgetc

    fscanf(p_file, "%d", &c);

    l'avantage c'est que tu peut declarer c en tant qu'entier si ta fonction setpixel attend un entier (sinon il tu peut utiliser atoi())


    Pour ce qui est du déroulement du programme, je te conseil de d'abord enregistrer le contenu du fichier txt dans un tableau puis de t'en servir pour ton affichage. Tu eviteras ainsi un acces au disque a chaque affichage de ton image.

  3. #3
    Membre éclairé
    Homme Profil pro
    amateur
    Inscrit en
    Octobre 2007
    Messages
    731
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : amateur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 731
    Par défaut
    Merci, dans les deux cas le code proposé fonctionne parfaitement. Cependant, je n'arrive pas à trouver une technique qui me permet de reconstruire le nombre. En supposant que tous les codes font 8 caractères comment s'y prendre ?

    Merci

  4. #4
    Membre très actif
    Avatar de TheDrev
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    310
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 310
    Par défaut
    Si chaque ligne de ton fichier à le meme nombre de caracteres, tu peut utiliser un simple tableau et le parcourir de 8 en 8.

    Sinon tu peut avoir un tableau a deux dimensions dont la premiere sera la ligne et la deuxieme une des valeurs du fichier

  5. #5
    Membre éclairé
    Homme Profil pro
    amateur
    Inscrit en
    Octobre 2007
    Messages
    731
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : amateur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 731
    Par défaut
    C'est pas le cas en fait. Je me suis laissé berner par l'aspect visuel. le code couleur s'arrête dès qu'à la lecture le fscanf rencontre un \n donc dès un retour à la ligne. Visuelement parlant c'est comme ça qu'ils sont séparés dans le txt.
    Quand on parcourt le txt mais qu'on affiche des int alors à la différence des caractère on ne peut pas savoir s'il y a un \0 ou \n ? Je suis perdu, je ne vois pas comment gérer ça.

    :boucle tant qu'on est pas à la fin du txt

    si le caractère est différent de \n
    alors c[i]=le caractère
    i++

    sinon i=0

    arriver à faire des caractères une chaine pour faire atoi et avoir le code.
    @boucle

    En code ce que j'ai fais = bugS permanentS

  6. #6
    Membre émérite Avatar de orfix
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2007
    Messages : 707
    Par défaut
    Citation Envoyé par TheDrev
    Salut, tu peut utiliser fgetc qui prend un FILE* et renvoie en char.
    Pas du tout fgetc renvois un int !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    int fgetc(FILE *stream);
    Une erreur courante ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <...>
    char c;
    <...>
    while ((c = fgetc(p_file)) != EOF)
    Risque de boucle infinis ( si sur ta plateforme les char sont par défaut non signé )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <...>
    int c;
    <...>
    while ((c = fgetc(p_file)) != EOF)

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par darkwall_37 Voir le message
    bonjour,

    J'ai enregistré dans un txt les code couleurs d'une image.
    J'aurais besoin de les passer en paramètre à la fonction setpixel.
    Le problème c'est que je ne sais pas comment faire pour les récupérer.
    Je sais qu'il faut utiliser fscanf mais de là à l'utiliser correctement...

    le fichier texte est rangé ainsi :

    ...
    14189931
    14189931
    ...
    faut-il comprendre qu'il s'agit de la représentation décimale d'un nombre valant 00D8856B en hexa, soit R=0xD8 V=0x85 B=0x6B ?

    Si c'est le cas, ça va tout de suite mieux en le disant.

    lire la ligne avec fgets()
    convertir dans un unsigned long avec strtoul() et la base 10
    séparer en RVB avec '>> (8*2)', '>> (8*1)' et '>> (8*0)'

  8. #8
    Membre éclairé
    Homme Profil pro
    amateur
    Inscrit en
    Octobre 2007
    Messages
    731
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : amateur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 731
    Par défaut
    Le problème c'est qu'avant de pouvoir traiter les informations, il faut d'abord que je les récupère et les reconstitue correctement. De caractères dans un tableau je dois réussir à les couper correctement et les convertir ensuite en COLORREF. Mais ce que j'ai tenté bugg ...

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par darkwall_37 Voir le message
    Le problème c'est qu'avant de pouvoir traiter les informations, il faut d'abord que je les récupère et les reconstitue correctement. De caractères dans un tableau je dois réussir à les couper correctement et les convertir ensuite en COLORREF. Mais ce que j'ai tenté bugg ...
    J'ai pourtant donné la solution. Fait de ton mieux et poste ton code si il y a un problème.

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

Discussions similaires

  1. [Debutant] Lecture de fichier txt
    Par vbbarent dans le forum Débuter
    Réponses: 11
    Dernier message: 06/05/2008, 11h13
  2. Problème de lecture de fichier .txt
    Par Lenaick dans le forum WinDev
    Réponses: 4
    Dernier message: 16/04/2008, 11h49
  3. [PC] [Visual Object Cobol] Lecture de fichier .txt
    Par vince3132 dans le forum Cobol
    Réponses: 7
    Dernier message: 14/03/2008, 13h43
  4. [Excel - VBA] lecture de fichier txt
    Par simstef dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 15/06/2007, 16h00
  5. PL/SQL lecture/ecriture fichier txt
    Par stos dans le forum PL/SQL
    Réponses: 2
    Dernier message: 19/05/2006, 12h19

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