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 :

Projet lisant un fichier texte dans c: ( débutant )


Sujet :

C++

  1. #1
    m1b
    m1b est déconnecté
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7
    Points : 2
    Points
    2
    Par défaut Projet lisant un fichier texte dans c: ( débutant )
    Hello,

    Voila ce que j'essaie de faire, c'est un programme on clique sur un bouton il crée un fichier text dans c: puis après je clique sur un bouton pour le lire. Et le text s'affiche dans un champ

    Maintenant ca marche la création du fichier, je peux lire la ligne une, mais impossible de lire les autres lignes , pourtant je fais une boucle pour lire les autres.. mais apparemment ca ne fonctionne pas !

    J'ai certainement mal formulé ma boucle...

    Pouvez vous m'aider ? merci

    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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    //---------------------------------------------------------------------------
     
    #include <vcl.h>
    #pragma hdrstop
    #include <stdio>  // insertion de la librairie stdio
    #include "projetcreation.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TUfmMain *UfmMain;
     
    //---------------------------------------------------------------------------
    __fastcall TUfmMain::TUfmMain(TComponent* Owner)
            : TForm(Owner)
    {
     
    }
    //---------------------------------------------------------------------------
    void __fastcall TUfmMain::BuCreatClick(TObject *Sender)
    {
     
    FILE* fichierRapport = NULL; // déclaration de mon fichier
     fichierRapport = fopen("C:\\test.txt", "w");  // création du fichier puis, puis accès en écriture
     
     
    fprintf(fichierRapport, "Germain \n ");
    fprintf(fichierRapport, "Tenthorey \n ");
    fprintf(fichierRapport, "Ruelle des Cartes 19 \n ");
    fprintf(fichierRapport, "1926 Fully \n ");
     
     
     fclose(fichierRapport);  // fermeture du fichier, ne pas oublier
     
    }
     
    //---------------------------------------------------------------------------
     
    void __fastcall TUfmMain::Button1Click(TObject *Sender)
    {
    FILE* fichierRapport = NULL;
    fichierRapport = fopen("C:\\test.txt", "r");  // création du fichier puis, puis accès en écriture
     
    char Data[1000];
     
     
     
    while (fgets(Data, sizeof(Data), fichierRapport) == NULL) {
            printf("%s \n", fichierRapport);
            }
     
    fclose(fichierRapport);
    afficheResult->Caption=Data;
     
     
     }
    //---------------------------------------------------------------------------

  2. #2
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 753
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 753
    Points : 10 704
    Points
    10 704
    Billets dans le blog
    3
    Par défaut
    fprintf, fopen, etc... c'est du C. En C++:
    http://c.developpez.com/faq/cpp/?pag...ture_par_ligne

  3. #3
    Membre averti
    Avatar de bigquick
    Profil pro
    Inscrit en
    Août 2002
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 356
    Points : 353
    Points
    353
    Par défaut
    Salut

    En effet, utilise les streams, ce sera plus simple et tu diminueras les sources d'erreurs.

    Sinon, par rapport à ton code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    while (fgets(Data, sizeof(Data), fichierRapport) == NULL) {
            printf("%s \n", fichierRapport);
            }
    J'imagine que tu voulais dire != NULL (vu que fget retourne NULL quand il n'a pas pu lire une ligne pour une raison ou une autre, comme la fin de fichier).

    Par contre dans ton code, si tu veux que afficheResult->Caption contienne le contenu du fichier, il faudra concatener les lignes lues, ce qui sera bien plus facile d'ailleurs quand tu utiliseras les streams et les strings du C++. Ou alors utiliser la solution de la FAQ qui lit tout le fichier d'un coup : http://c.developpez.com/faq/cpp/?pag...RS_full_buffer



    Et enfin, pour information (ou pour chipotter):
    #include <stdio> // insertion de la librairie stdio
    En C ou C++, on parle de bibliothèque (mauvaise traduction )

  4. #4
    m1b
    m1b est déconnecté
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Rsalut, merci de vos réponses, vu que je suis un débutant il est difficile pour moi d'intégrer ces code c++ avec std:: etc dans mon fichier .cpp sans me retrouver avec un max d'erreurs.

    Et si au lieu de faire ceci,


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    char Data[1000];
     
     
     
    while (fgets(Data, sizeof(Data), fichierRapport) == NULL) {
            printf("%s \n", fichierRapport);
            }
    Je fais quelque chose comme ceci, mais normalement je devrait mettre \n pour qu'il puisse lire la fin de ligne ? et %s pour la chaine ? Pas toujours évident au départ

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    int i;
    while (i < 10 ){
    fgets(line, 1000  , fichierRapport );
    i++;
    }

  5. #5
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Rsalut, merci de vos réponses, vu que je suis un débutant il est difficile pour moi d'intégrer ces code c++ avec std:: etc dans mon fichier .cpp sans me retrouver avec un max d'erreurs
    Ce n'est pourtant pas si dur

    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
    #include <string>
    #include <fstream>
    #include <iostream>
     
    void __fastcall TUfmMain::Button1Click(TObject *Sender)
    {
        std::ifstream fichierRapport("C:/test.txt");
     
        if (!fichierRapport)
        {
            // Erreur d'ouverture de fichier
        }
     
        std::string Data;
     
        while (std::getline(fichierRapport, Data))
        {
            std::cout << fichierRapport << std::endl;
        }
     
        afficheResult->Caption = Data.c_str();
    }

  6. #6
    m1b
    m1b est déconnecté
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    merci de ta réponse, après de multiples tests et avec l'aide de ton code, voici a quoi j'arrive, en fait maintenant il lit la dernière ligne de mon fichier texte et le champ m'affiche cette dernière ligne ( déja une évolution )


    Germain
    Tenthorey
    Ruelle des Cartes 19
    1926 Fully // texte qui est affiché dans mon champ

    les autres je sais pas si il les a pas lu, ou bien s'il les a écrasé ? Il manque peut être un paramètre pour qu'il m'affiche toute les lignes

  7. #7
    Membre averti
    Avatar de bigquick
    Profil pro
    Inscrit en
    Août 2002
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 356
    Points : 353
    Points
    353
    Par défaut
    Par contre dans ton code, si tu veux que afficheResult->Caption contienne le contenu du fichier, il faudra concatener les lignes lues, ce qui sera bien plus facile d'ailleurs quand tu utiliseras les streams et les strings du C++. Ou alors utiliser la solution de la FAQ qui lit tout le fichier d'un coup : http://c.developpez.com/faq/cpp/?pag...RS_full_buffer
    Tel que ton code est écrit (c'était dejà le cas dans ton 1er post, Loulou24 n'a fait "que" le traduire en C++), il lit les lignes 1 par 1, et les stocke au même endroit. Donc évidemment, elles s'écrasent au fur et à mesure, et c'est la dernière qui est affichée.

    Tu peux

    - Les concatener dans une chaine "Total", avec un code du type:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    std::string Data;
    std::string Total;
     
    while (std::getline(fichierRapport, Data))
    {
        Total += Data;
    }
     
    afficheResult->Caption = Total.c_str();
    Ou utiliser le lien de la FAQ que je t'ai donné pour lire tout le fichier d'un coup.

  8. #8
    m1b
    m1b est déconnecté
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    merci du suivi

    j'ai modifier encore certaines chose et maintenant c'est ok, il faut que je trouve encore des informations sur comment traiter le texte de manière à ce qu'il le lise sur une seule ligne maintenant il le lit
    xxxxxx
    xxxxx
    xxxxxx
    xxxxx

    et il faut que j'arrive à xxxxxxx xxxxxxx xxxxxx xxxxxx
    je pense que je doit dire supprime "/n" ou ne tient pas compte de "/n"

  9. #9
    Membre averti
    Avatar de bigquick
    Profil pro
    Inscrit en
    Août 2002
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 356
    Points : 353
    Points
    353
    Par défaut
    Pour supprimer facilement toutes les occurences d'un caractère dans une chaine, maintenant que tu utilises la STL, c'est facile

    On se sert souvent du remove-erase idiom :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ChaineTotale.erase( remove( ChaineTotale.begin(), ChaineTotale.end(), '\n'), ChaineTotale.end() );
    Ceci va d'abord mettre tous les caractères '\n' (fin de ligne) à la fin de la chaine[*] (remove), puis les effacer (erase).

    [*] : ce n'est pas exactement ça, mais l'idée y est

    edit: c'est quand même étrange puisque std::getline ne stocke pas le caractère délimiteur ('\n' par défault). Tu ne devrais pas les avoir dans ta chaine finale...

Discussions similaires

  1. Réponses: 17
    Dernier message: 18/08/2014, 15h17
  2. [Débutant] message erreur en lisant un fichier texte
    Par megapacman dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 08/10/2007, 20h33
  3. recherche dans un fichier texte en perl(débutant)
    Par Shyboy dans le forum Langage
    Réponses: 3
    Dernier message: 04/07/2006, 23h53
  4. Lecture d'un fichier texte dans un projet TOMCAT
    Par brice_nice dans le forum Tomcat et TomEE
    Réponses: 2
    Dernier message: 03/07/2005, 15h04
  5. [CR] fichier texte dans un etat
    Par fab dans le forum SAP Crystal Reports
    Réponses: 7
    Dernier message: 12/09/2003, 10h59

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