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 :

caractère suivant dans un fichier


Sujet :

C

  1. #1
    Membre éclairé Avatar de janyoura
    Femme Profil pro
    étudiante ingénierie informatique
    Inscrit en
    Mars 2012
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : étudiante ingénierie informatique

    Informations forums :
    Inscription : Mars 2012
    Messages : 365
    Par défaut caractère suivant dans un fichier
    salut
    je veux faire une fonction qui me retourne le caractère suivant d'un caractère à partir d'un fichier ouvert en mode lecture.
    Le caractère suivant n'est considéré que s'il n'est pas un espace ou une tabulation.
    voici le code de la fonction:
    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
    char carsuivant()
    {
        File* fichier = NULL;
        int caractereActuel = 0;
        char caractereSuiv;
        int i = 1;
        fichier = fopen("tla.txt", "r");
        if (fichier != NULL)
        {
            caractereActuel = fgetc(fichier);
            while (caractereActuel != EOF )
            {
                while (i != EOF)
                {
                     caractereSuiv = fseek(fichier, i, SEEK_CUR);
                if (caractereSuiv != '\n' && caractereSuiv != '' && caractereSuiv != '\t')
     
                    return  caractereSuiv;
     
                else
     
                    i++;
                }
     
     
            }
            fclose(fichier);
        }
     
    }
    Est il correcte? sinon ou figure les erreurs?
    merci pour l'aide

  2. #2
    Membre Expert
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2011
    Messages
    1 255
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 255
    Par défaut
    Tu as bien regardé la doc de fseek ?
    fseek retourne 0 si emme a réussi à se positionner dans le fichier.
    si tu veux lire la caractère il faut (re)faire un fgetc (après fseek).
    tu dois faire un fgetc pour récupérer le caractère courant puis des fgetc pour trouver le suivant (plus de fseek, fgetc se déplace automatiquement de 1 caractère dans le fichier)

    Ca c'est pour l'explication des fonctions.

    Par contre je ne comprends pas la logique de ton code par rapport à la description.

    je veux faire une fonction qui me retourne le caractère suivant d'un caractère à partir d'un fichier ouvert en mode lecture.
    Ton code retourne le caractère suivant du 1er caractère du fichier.

    ton return caractereSuiv; n'est pas "beau"; tu as oublié le fclose avant le return.

  3. #3
    Membre éclairé Avatar de janyoura
    Femme Profil pro
    étudiante ingénierie informatique
    Inscrit en
    Mars 2012
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : étudiante ingénierie informatique

    Informations forums :
    Inscription : Mars 2012
    Messages : 365
    Par défaut
    salut,
    donc pour séléctionner le caractère suivant d'un caractère courant, on applique deux fois fgetc et c'est fais?

  4. #4
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 492
    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 492
    Billets dans le blog
    1
    Par défaut
    Je pense qu'il va falloir relire la doc de la fonction fgetc http://man.developpez.com/man3/fgetc.3.php ! :o

    Elle lit le caractère suivant, donc un seul appel suffit.

  5. #5
    Rédacteur
    Avatar de Amnell
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2009
    Messages
    1 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 840
    Par défaut
    Bonjour,

    Pour ma part, je n'adhère pas du tout à la fonction lseek (imaginez une socket, ferez-vous un lseek dessus pour des données que vous n'aurez potentiellement pas reçues ?). Je propose plutôt de réaliser une fonction à partir de pointeurs statiques. En reprenant la fonction précédemment donnée, je propose ceci :

    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
    char carsuivant()
    {
        static File *fichier = NULL;
        char caractereSuiv;
     
        if (fichier == NULL && !(fichier = fopen("tla.txt", "r")))
            return '\0';
        if ((caractereSuiv = fgetc(fichier)) == EOF)
        {
            // Dans le cas où on est arrivé à la fin, on close le fichier,
            // on réinit fichier à NULL et on retourne le caractère nul (\0) :
            fclose(fichier);
            fichier = NULL;
            return '\0';
        }
        return caractereSuiv;
    }
    Cela pourrait être amélioré en ayant la possibilité de passer le nom de fichier en argument. Dans un sens, il ne s'agit que d'une application de fgetc.

    Bonne continuation,
    Amnell.
    N'oubliez pas de consulter la FAQ Qt ainsi que les cours et tutoriels C++/Qt !

    Dernier article : Débuter avec les Enlightenment Foundation Libraries (EFL)
    Dernières traductions : Introduction à Qt Quick - Applications modernes avec Qt et QML
    Vous cherchez un livre sur Qt 5, Qt Quick et QML ? Créer des applications avec Qt 5 - Les essentiels

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

Discussions similaires

  1. [Débutant]Caractères chinois dans un fichier.
    Par angearael dans le forum Langage
    Réponses: 5
    Dernier message: 04/01/2007, 13h54
  2. [C#] Caractères spéciaux dans un fichier
    Par KibitO dans le forum C#
    Réponses: 7
    Dernier message: 04/01/2007, 09h16
  3. Réponses: 15
    Dernier message: 04/01/2007, 08h47
  4. Insertion caractère spécial dans un fichier
    Par lenouvo dans le forum MFC
    Réponses: 2
    Dernier message: 01/02/2006, 11h30
  5. [XSL] Caractère incorrect dans un fichier XML
    Par nicobest dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 05/09/2005, 14h06

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