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

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    19
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 19
    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 confirm� 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
    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
    Membre averti
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    19
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 19
    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 confirm� 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
    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
    Membre averti
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    19
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 19
    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
    Candidat au Club
    Inscrit en
    Mars 2004
    Messages
    4
    D�tails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 4
    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
    Membre averti
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    19
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 19
    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
    Candidat au Club
    Inscrit en
    Mars 2004
    Messages
    4
    D�tails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 4
    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
    Candidat au Club
    Inscrit en
    Mars 2004
    Messages
    4
    D�tails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 4
    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
    Membre averti
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    19
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 19
    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 Expert
    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
    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
    Membre averti
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    19
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 19
    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