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++Builder Discussion :

Comment aller chercher une info dans un fichier


Sujet :

C++Builder

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2007
    Messages : 163
    Points : 58
    Points
    58
    Par défaut Comment aller chercher une info dans un fichier
    Bonjour,

    J'aimerais aller chercher dans un fichier situer dans "C:\Temp\coucou.txt" la premiere ligne.

    J'ai fais ce code mais je ne sais pas utiliser fgets, fread, ou fgetc.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
      FILE *fichierRapport = NULL ;
      fichierRapport = fopen("C:\\Temp\\readme.txt","a+t") ;
    Merci

  2. #2
    Membre confirmé Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    933
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 933
    Points : 466
    Points
    466
    Par défaut
    Si tu travaille avec la VCL

    Utilise une TStringList pour charger le contenu de ton fichier, c'est plus simple.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
       TStringList *Liste = new TStringList();
     
       // Chargement du contenu du fichier
       Liste->LoadFromFile("C:\\Temp\\readme.txt");
    Ensuite chaque ligne de ton fichier correspond à un élément de la liste. donc la première ligne se situe à l'index 0.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2007
    Messages : 163
    Points : 58
    Points
    58
    Par défaut
    Le truc c'est que c'est un devoir et je dois faire comme j'ai décris plus haut.

    Merci

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2007
    Messages : 163
    Points : 58
    Points
    58
    Par défaut
    Bonsoir,

    J'ai réussit a aller chercher dans le fichier la premiere ligne mais a la fin de cette ligne il me met un caractère spéciale bizzare.. Voici mon code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    //---------------------------------------------------------------------------
    void __fastcall TfmMain::buReadClick(TObject *Sender)
    {
       char cTexte[1000] = "" ;
       FILE *fichier = NULL ;
       fichier = fopen("C:\\Temp\\readme.txt","a+t") ;
       fgets(cTexte,100,fichier);
       edNom->Text = (AnsiString)cTexte ;
    }
    //------------------------------------------------------------------------------

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2007
    Messages : 163
    Points : 58
    Points
    58
    Par défaut
    Mais maintenant comment je fais pour aller chercher ce qu'il y a dans ma deuxieme ligne.. ?

  6. #6
    Membre averti
    Avatar de Altau
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    296
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 296
    Points : 360
    Points
    360
    Par défaut
    Quelque chose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    FILE *in;
      if ((in = fopen(......)) != NULL)
      {
        while (!feof(in)) // eof = End Of File
        {
          if (fgets(......))
          {
            .....
            .....
          }
        }
      }
      fclose(in);

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2007
    Messages : 163
    Points : 58
    Points
    58
    Par défaut
    J'ai vraiment pas compris ta méthode. Moi je voudrais prendre une ligne de mon fichier et le placer dans un TEdit. Je m'explique: La premiere ligne dans mon premier TEdit, la deuxieme dans un autre TEdit.. COmment y parvenir ?

    Merci

  8. #8
    Membre habitué
    Inscrit en
    Mars 2002
    Messages
    105
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 105
    Points : 133
    Points
    133
    Par défaut
    Bonjour,

    On ne peut pas expliquer beaucoup plus : Altau a quasiment écrit toute la fonction. Or, comme tu l'as indiqué avant :

    Le truc c'est que c'est un devoir et je dois faire comme j'ai décris plus haut.
    Il suffit de regarder l'aide (F1) sur "fgets", "feof". Tu comprendras alors qu'il te reste simplement à remplacer les "....." dans le code fourni par Altau...

    Nicolas

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    349
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 349
    Points : 376
    Points
    376
    Par défaut
    Bonjour,

    Une première remarque, c'est du C et non pas du C++, tu aurais donc pu poser ta question sur le forum C.
    Concernant le caractère bizarre, il s'agit du caractère de fin de ligne ('\n' ou '\r') conservé par fgets.
    Il te faut le supprimer.

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2007
    Messages : 163
    Points : 58
    Points
    58
    Par défaut
    Salut,

    Je n'ai pas mis ca dans le forum C parce que je fais ca en C++ Builder 6 et je ne savais pas si c'était du C ou du C++.

  11. #11
    Membre du Club
    Inscrit en
    Avril 2006
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 56
    Points : 57
    Points
    57
    Par défaut
    ce code un peu vieux jeux foctionne aussi bien sur c
    que sur c++ il lit toutes les lignes d'un fichier et les
    envoie sur un combobox tu verra que la premiere ligne est
    affiché avant la boucle tout pourras l'afficher par exemple
    dans un edite et toutes les autres ailleurs


    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
     
    char ww1 [256]; char ww2 [256];
    GetWindowsDirectory(sname, sizeof(sname));
    strcat(sname,"\\htwww.txt");
    if (FileExists(sname)){
    hF=CreateFile(sname,GENERIC_READ|GENERIC_WRITE,FILE_SHARE_READ,NULL,
    OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,NULL);
    // if(hF==INVALID_HANDLE_VALUE){ShowMessage ("impossible d'ouvrir");}
    if(hF!=INVALID_HANDLE_VALUE){
    Status=GetFileSize(hF,NULL);
    SetFilePointer(hF,0,NULL,FILE_CURRENT);
    ReadFile(hF,patter,Status,&Read,NULL);
    patter[Read]='\0';
    xnn=patter; tkn= "\r\n";
    ptr=strtok(xnn, tkn);
    sprintf(ww1, "%s",xnn);
    if(strstr(ww1,"www.")||strstr(ww1,"http:")){
    ComboBox2->Items->Add(ww1); }
    while (ptr){
    if ((ptr=strtok(0,tkn)) !=0){ // slash++;
    sprintf(ww2, "%s",ptr);
    if(strstr(ww2,"www.")||strstr(ww2,"http:")){
    ComboBox2->Items->Add(ww2);}
    }}CloseHandle(hF);} }

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2007
    Messages : 163
    Points : 58
    Points
    58
    Par défaut
    Je suis obligé de réussir a faire ce projet...

    Mais j'arrive que a lire la premiere ligne de mon fichier txt. Ceci est mon code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    //---------------------------------------------------------------------------
    void __fastcall TfmMain::buReadClick(TObject *Sender)
    {
       char cTexte[1000] = "" ;
       FILE *fichier = NULL ;                 
       fichier = fopen("C:\\Temp\\readme.txt","a+t") ;
       fgets(cTexte,100,fichier);
       edNom->Text = (AnsiString)cTexte ;
     
    }
    //---------------------------------------------------------------------------
    Mon fichier texte comporte deux lignes, dans un premier edit je dois mettre la premiere ligne et dans mon deuxieme TEdit ma deuxieme ligne.. Je fais comment? Pour l'instant j'ai la premiere ligne de mon fichier texte qui s'affiche dans mon premier TEdit mais la deuxieme je suis completement perdu.

    Merci

  13. #13
    Membre averti
    Avatar de Altau
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    296
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 296
    Points : 360
    Points
    360
    Par défaut
    Je t'ai écrit comment faire dans mon post précédent. Je n'ai pas le sentiment que ce forum est destiné à faire exécuter tes devoirs par d'autres mais aider à réfléchir pour que tu réalises toi-même ce qui t'est demandé. Tu as tout ce qu'il faut pour y parvenir. Bon courage.

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2007
    Messages : 163
    Points : 58
    Points
    58
    Par défaut
    Humm j'ai enfin réussit.
    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
    //---------------------------------------------------------------------------
    void __fastcall TfmMain::buReadClick(TObject *Sender)
    {
       char cTexte[1000] = "" ;
       FILE *fichier = NULL ;
       fichier = fopen("C:\\Temp\\readme.txt","a+t") ;
       fgets(cTexte,100,fichier);
       edNom->Text = (AnsiString)cTexte ;
     
      if ((fichier = fopen("C:\\Temp\\readme.txt","a+t")) != NULL)
      {
        while (!feof(fichier))
        {
          if (fgets(cTexte,100,fichier))
          {
             edDate->Text = (AnsiString)cTexte ;
          }
        }
      }
      fclose(fichier);
    }
    //---------------------------------------------------------------------------
    Par contre maintenant j'aimerais lire un mot dans mon fichier txt qui se situe après une tabulation. Est-ce possible d'y parvenir ?

  15. #15
    Membre averti
    Avatar de Altau
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    296
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 296
    Points : 360
    Points
    360
    Par défaut
    Les lignes 3,4 et 5 de ta fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
       fichier = fopen("C:\\Temp\\readme.txt","a+t") ;
       fgets(cTexte,100,fichier);
       edNom->Text = (AnsiString)cTexte ;
    sont inutiles car tu ouvres le fichier dans le if qui suit.

  16. #16
    Membre averti
    Avatar de Altau
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    296
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 296
    Points : 360
    Points
    360
    Par défaut
    C'est vrai que ma dernière réponse n'est pas appropriée car cela ne permet pas, tel que tu décris tes zones, de faire la différence entre les 2 TEdit. Il est vrai aussi qu'avec seulement 2 lignes à gérer, la boucle while est un peu superflue. Mais ce qui est sûr, c'est qu'il ne faut pas 2 fopen dans le code.

Discussions similaires

  1. Réponses: 6
    Dernier message: 15/02/2011, 16h22
  2. Comment chercher une valeur dans un fichier text?
    Par lili81 dans le forum C++Builder
    Réponses: 3
    Dernier message: 16/06/2008, 16h18
  3. Réponses: 9
    Dernier message: 11/07/2007, 23h46
  4. chercher une chaine dans un fichier
    Par bwwilly dans le forum Langage
    Réponses: 4
    Dernier message: 25/04/2007, 15h03
  5. Réponses: 4
    Dernier message: 08/04/2006, 09h10

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