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 :

Probleme pour lire un fichier Ini


Sujet :

C++Builder

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 19
    Points : 9
    Points
    9
    Par défaut Probleme pour lire un fichier Ini
    Bonjour a tous!

    je dois faire un prog (ss buider c++ V6 entreprise) devant recuperer les informations d'un fichier Ini, du type ci joint! mais je ne vois pas comment m'y prendre.

    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
     Contenue du Fichier.ini
     
    [all_access]          // Nom Compte all_access
    Login=all_access  // Login du compte
    Pass=toto            // Pass du compte
    Actived=0           // Actif si 1 sinon Inactif
    Dir0=D:\             // acces au repertoire 
    ....
     
    [laurent]
    Login=essai
    Pass=tutu
    ...
     
    [celine]
    Login=celine
    Pass=seb
    ...
    j'avais pense a un TIniFile, mais le problem c'est que comme les mots entre [] ne sont pas connus!
    donc je peux pas utiliser la fontion suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
       TIniFile *Ini = new TIniFile(ExtractFilePath(Application->ExeName)+"option.ini");
       Login= Ini->ReadString(????????, "Login", 0);
       Pass=  Ini->ReadString(????????, "Pass", 0);
       Actif= Ini->ReadString(????????, "Actived", 0);
       delete Ini;
    Comment trouver la valeur dans [] pour pouvoir recherche comme il faut dans le ini?
    Ini->ReadString(????????, "Actived", 0) et surtout qu'il me faut recuper le nom du compte!

    Quelqu'un aurait une solution a me donner SVP?

  2. #2
    Membre régulier Avatar de chobol
    Profil pro
    Technicien réseau
    Inscrit en
    Octobre 2003
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Octobre 2003
    Messages : 122
    Points : 122
    Points
    122
    Par défaut
    Si j'ai bien compris ce que tu demandes la fonction suivante devrait t'aider
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Ini->ReadSections(Sections);
    Citation Envoyé par Aide de Builder6
    Lit le nom de toutes les sections d'un fichier INI dans une liste de chaînes.

    virtual void __fastcall ReadSections(Classes::TStrings* Strings);

    Description

    Appelez ReadSections pour lire le nom de toutes les sections d'un fichier INI dans une liste de chaîne.

    Strings désigne l'objet chaîne destiné à contenir les noms lus. Strings peut pointer sur un descendant TStrings ou sur une propriété de composant comme Items pour un composant TListBox.

    Les données lues par ReadSections proviennent de la copie en mémoire du fichier INI et pas du fichier INI sur disque.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 19
    Points : 9
    Points
    9
    Par défaut
    merci je vais tester sa!
    Desole mais j'ai la version US! y a des truc pas toujours evident a comprendre!

  4. #4
    Membre régulier Avatar de chobol
    Profil pro
    Technicien réseau
    Inscrit en
    Octobre 2003
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Octobre 2003
    Messages : 122
    Points : 122
    Points
    122
    Par défaut
    Pour ce problème et tous les autres (j'ai oublié de te mettre ce lien dans mon message precedent ) :
    http://chgi.developpez.com/tips/

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 19
    Points : 9
    Points
    9
    Par défaut
    il dois y avoir un truc qui m'echappe la!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    TIniFile* pif = new TIniFile("ExtractFilePath(Application->ExeName)+"option.ini");
      pif->ReadSections(ComboBoxCompte->Items);
      pif->ReadSection("Login",ListBox1->Items);
      pif->ReadSection("Pass",ListBox2->Items);
      delete pif;
    j'ai teste ceci est j'ai que le 1er compte qui s'affiche et jai pas le le login et le pass, et je n'ai meme pas les autre compte!
    sa copie bien tout le fichier d'un coups? non?

  6. #6
    Futur Membre du Club
    Inscrit en
    Mars 2004
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 4
    Points : 5
    Points
    5
    Par défaut
    Bonjour,

    Je suis étonnée que tu arrives à lire des chaines de caractères sans mettre de guillemet dans ton fichier init .

    Voici mon fichier init :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    [Image]
    Acces="c:\Mon repertoire\Mon image.bmp"
    Et Voici le cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    TIniFile *Ini = new TIniFile(ExtractFilePath(Application->ExeName)+"option.ini"); 
       AnsiString sAccesImage= Ini->ReadString("Image", "Acces", 0);
    As-tu essayer de lire des entiers ? Par exemple pour ta variable Actived ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    TIniFile *Ini = new TIniFile(ExtractFilePath(Application->ExeName)+"option.ini"); 
      int iActif= Ini->ReadInteger("all_access", "Actived", 0); 
      AnsiString sActif = IntToStr(iActif);
    A bientôt
    Véra

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 19
    Points : 9
    Points
    9
    Par défaut
    je pense qu'il y a confision dans ce que je demande Vera!
    le repertoire je ne l'utilise pas!
    et mon probleme et dans le fait d'utiliser Ini->ReadString("Image", "Acces", 0); alors que je connais pas encore le "image" que tu me le dit dans ton exemple!
    c'est la ou est le problem!

    donc j'en suis toujours la:

    Citation Envoyé par Sebinou
    il dois y avoir un truc qui m'echappe la!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    TIniFile* pif = new TIniFile("ExtractFilePath(Application->ExeName)+"option.ini");
      pif->ReadSections(ComboBoxCompte->Items);
      pif->ReadSection("Login",ListBox1->Items);
      pif->ReadSection("Pass",ListBox2->Items);
      delete pif;
    j'ai teste ceci est j'ai que le 1er compte qui s'affiche et jai pas le le login et le pass, et je n'ai meme pas les autre compte!
    sa copie bien tout le fichier d'un coups? non?

  8. #8
    Futur Membre du Club
    Inscrit en
    Mars 2004
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 4
    Points : 5
    Points
    5
    Par défaut
    Désolée ... J'ai effectivement mal compris !

    Je n'ai pas d'idées pour solutionner ton problème.

    Véra

  9. #9
    Futur Membre du Club
    Inscrit en
    Mars 2004
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 4
    Points : 5
    Points
    5
    Par défaut
    Salut !

    Pour m'excuser d'avoir répondu à côté de ta question, voici une piste :

    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
     
    TMemoryStream* pms = new TMemoryStream();
     
    pms->LoadFromFile ("Fichier.ini");
    pms->Seek(0,soFromBeginning);
     
    char* Buffer;
    pms->ReadBuffer(Buffer, pms->Size);
     
    AnsiString* Str = new AnsiString(Buffer);
    TList* ListeDeTitre = new TList;
     
    while ( i<Str->Length )
    {    int i_debut=m_sNomDeSauvegarde->AnsiPos("[");
          int i_fin=m_sNomDeSauvegarde->AnsiPos("]");
          ListeDeTitre(new Ansistring( Str->SubString(i_debut+1,i_fin-1)))
    }

    Aucun certitude sur la validité du code ...

    Véra

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 19
    Points : 9
    Points
    9
    Par défaut
    merci pour ton Aide Vera! mais je voudrais continuer avec le TIniFile, c'est qd meme beaucoups plus simple d'acces!

    j'ai creer une fonction qui cherche les sections et un qui lit des données!

    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
     
    void __fastcall LireDonnees(const AnsiString cherche)
    {
      TIniFile* pif = new TIniFile(RepertoireIni);
      Login = pif->ReadString(cherche,"Login","0");
      Pass = pif->ReadString(cherche,"Pass","0");
      delete pif;
    }
     
    void __fastcall ChargeSection(TComboBox* Compte)
    {
       // recuperation de chaque section contenu dans le repertoireIni
      TIniFile* pif = new TIniFile(RepertoireIni);
      pif->ReadSections(Compte->Items);
      delete pif;
      Compte->ItemIndex = 0;
    }
    j'accede comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    ..............
    //remplis ComboBoxCompte
    ChargeSection(ComboBoxCompte);
    //Charge les données
    LireDonnees(ComboBoxCompte->Text);
    //donne l'adresse du FTP
    EditAdresse->Text = "Compte= " + ComboBoxCompte->Text + ", Login=" + Login + ", Pass=" + Pass;
    ..............
    mais la synthaxe de la fonction LireDonnees ne dois pas etre donne! si qq pouvait m'aider!

  11. #11
    Membre chevronné
    Avatar de Gilles Louïse
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    421
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2002
    Messages : 421
    Points : 1 911
    Points
    1 911
    Par défaut
    Après avoir lu les sections par ReadSections, il faut boucler et lire les informations pour chacune d'elles. Il faut aussi donner le chemin entier à RepertoireIni en utilisant \\ pour séparateur sinon le fichier ne sera pas trouvé par exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    const AnsiString RepertoireIni="e:\\projetsBCB\\EssaiIni\\Data.ini";
    sauf si ce nom est créé par programme via par exemple la fonction ChangeFile (voyez mes Remarques sur mon site, alinéa 69, sur TIniFile, cliquez www en bas de ce message pour y accéder)

    Mettez un bouton et trois ListBox sur la forme, en cliquant le bouton on va lire les sections dans ListBox1 puis pour chacune d'elles on boucle et on lit Login dans ListBox2 et Pass dans ListBox3.

    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
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    int i;
    AnsiString A;
    TIniFile* pif = new TIniFile(RepertoireIni);
    pif->ReadSections(ListBox1->Items);
     
    for(i=0;i<ListBox1->Count;i++)
       {
       A=pif->ReadString(ListBox1->Items->Strings[i],"Login","NIHIL");
       ListBox2->AddItem(A,ListBox2);
       A=pif->ReadString(ListBox1->Items->Strings[i],"Pass","NIHIL");
       ListBox3->AddItem(A,ListBox2);
       }
    delete pif;
    À partir de là, vous pouvez adapter pour le reste et savoir lire les autres champs même si ce sont des entiers (ReadInteger) ou autres.

    À bientôt
    Gilles

  12. #12
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 19
    Points : 9
    Points
    9
    Par défaut
    merci pour ton aide Gilles!
    j'en ai profite pour regarder ton site! c'est genial les tutos!

    j'adapte le code! sa devrais aller je pense!

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

Discussions similaires

  1. [PHP 4] [PHP 4.4.1] probleme pour lire un fichier distant avec CURL
    Par seben dans le forum Langage
    Réponses: 6
    Dernier message: 27/11/2009, 08h38
  2. probleme pour lire un fichier
    Par azamharir dans le forum MFC
    Réponses: 2
    Dernier message: 04/12/2007, 15h14
  3. Probleme pour lire un fichier
    Par Jiybee dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 01/12/2007, 19h21
  4. Probleme pour lire un fichier specialement
    Par coco.cohen dans le forum C
    Réponses: 3
    Dernier message: 18/11/2007, 02h32
  5. probleme pour lire un fichier .bat
    Par abdou82 dans le forum VB.NET
    Réponses: 1
    Dernier message: 20/09/2007, 18h18

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