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 :

comment lire un .txt en excluant les retours chariot


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 2
    Par défaut comment lire un .txt en excluant les retours chariot
    Bonjour
    J'arrive a lire dans un fichier et a placer son contenu dans un tableau.
    Le probleme est que le texte contenu dans le fichier contient des retours chariot et je ne veux pas en tenir compte.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    for (i=0 ; i<81 ; i++) /* boucle pour lire dans le fichier */
        {
        if (fscanf (fichier, "%c", &y) == 1) /* lecture d'un caractère*/
            {
            if (y!=13) /* code ascii du retour chariot */
                x[i] = y; /* réussi => on le stocke */
            }
    voici le contenu du fichier texte:
    ----8---1
    --7--9-24
    ---6-1---
    -51---8--
    ----274--
    4---95--3
    71------5
    865----32
    -24------

    ce que je voudrais stocker dans le tableau:
    ----8---1--7--9-24---6-1----51---8------274--4---95--371------5865----32-24------

    voici la source entiere:
    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
     
    #include <stdio.h>
     
     
    int main ()
    {
    FILE *fichier ;
    int i ;
    int x[81], y ;
     
    /* ouverture du fichier 'grille.txt' pour lecture (r) en mode texte (t) */
    fichier = fopen ("grille.txt", "rt") ;
    /* en cas d'échec de l'ouverture, le pointeur est NULL: intercepter ce cas */
    if (fichier == NULL)
        {
        /* message d'alerte et fin du programme */
        printf ("Problème d'ouverture du fichier grille.txt\n") ;
        return 0;
        }
    for (i=0 ; i<81 ; i++) /* boucle pour lire dans le fichier */
        {
        if (fscanf (fichier, "%c", &y) == 1) /* lecture d'un caractère*/
            {
            if (y!=13) /* code ascii du retour chariot */
                x[i] = y; /* réussi => on le stocke */
            }
            else /* échec */
                {
                printf ("Erreur ligne %d\n", i) ; /* message */
                fclose (fichier) ; /* fermeture du fichier */
                return 0; /* arrêt du programme */
                }
            }
    printf ("\nVoila :\n"); /* affichage des éléments du tableau */
    for (i=0 ; i<81 ; i++)
        printf ("%c", x[i]);
    fclose (fichier) ; /* fermeture du fichier */
    return 0;
    }
    j'ai aussi remarque en mettant printf ("%d", x[i]); au lieu de printf ("%c", x[i]); que ce ne sont pas des codes ascii qui sont stocké dans y mais des codes du genre 2147348525

    merci

  2. #2
    Membre confirmé Avatar de FidoDido®
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2005
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2005
    Messages : 101
    Par défaut

  3. #3
    Membre Expert
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Par défaut
    Salut, tu ne peux pas ne pas lire les sauts de ligne... Donc oui, il faut tester si le catactere lu est un saut de ligne (utilise la constante caractere '\n' au lieu de sa valeur 13)
    Tu peux aussi utiliser fgetc au lieu de fscanf ("%c")

  4. #4
    Membre confirmé Avatar de FidoDido®
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2005
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2005
    Messages : 101
    Par défaut
    Si j'ai bien compris, c'est pas le retour charriot que tu veux éviter, mais le retour à la ligne : \n dont le code ascii est 10

    Après, tu devrais plutôt utiliser fgetc que fscanf

  5. #5
    Membre confirmé Avatar de FidoDido®
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2005
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2005
    Messages : 101
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    char c;
    .
    .
    .
    for (i=0 ; i<81 ; i++) /* boucle pour lire dans le fichier */
        {
             if ((c=fgetc(fichier)) != '\n' && c!=EOF) /* lecture d'un caractère*/
        {
              x[i] = c; /* réussi => on le stocke */
        }
           else /* échec */
           ...

  6. #6
    Membre Expert
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Par défaut
    Sinon pour tes printf qui affichent des 216847621, ça n'a rien à voir avec %c ou %d, c'est parce que des elements de ton tableau n'auront pas été initialisés.

    Citation Envoyé par FidoDido®
    \n dont le code ascii est 10
    Ah oui, en plus

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 2
    Par défaut
    ok! merci tlm, ca fonctionne

  8. #8
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut
    13 c'est le retour chariot, la touche "enter".

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

Discussions similaires

  1. comment gérer les retour chariot dans un label?
    Par Jayceblaster dans le forum Windows Forms
    Réponses: 24
    Dernier message: 07/07/2007, 18h15
  2. [C#]Comment formater les retours chariots dans un datalist
    Par nashouille dans le forum ASP.NET
    Réponses: 2
    Dernier message: 03/07/2006, 14h05
  3. Réponses: 1
    Dernier message: 11/01/2006, 11h58
  4. Réponses: 2
    Dernier message: 29/11/2005, 14h17

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