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 :

problème avec un fichier ini


Sujet :

C++Builder

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    216
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2007
    Messages : 216
    Points : 88
    Points
    88
    Par défaut problème avec un fichier ini
    Bonjour,

    Est-il possible dans un fichier ini de lire une suite de nombre séparés par un espace ou un retour a la ligne par exemple (comme ici dessous à la clé F)?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    [Section Freq]
    Nfreq = 3
    F = 100.
        200.
        20000.
    En fait, peut on faire correspondre à une clé plusieurs valeurs, que je pourrais récupérer sous la forme d'un vecteur?

    Merci d'avance

  2. #2
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Points : 4 935
    Points
    4 935
    Par défaut
    Salut,

    Ce que tu peux faire, c'est enregistrer les valeurs les unes à la suite des autres, et ensuite, dans ton programme, traiter cette chaîne en splittant avec comme séparateur une virgule, un slash ou autre encore ...

    C'est une piste qui, je pense, est une bonne solution.
    Il faut voir ce que les autres en pense

    @ +

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    216
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2007
    Messages : 216
    Points : 88
    Points
    88
    Par défaut
    tu dis dans le fichier ini de les séparer par une virgule ou un slash?
    et après comment tu lis?

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

    Informations forums :
    Inscription : Juillet 2002
    Messages : 296
    Points : 360
    Points
    360
    Par défaut
    avec un strtok(...) je dirais.

  5. #5
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Points : 4 935
    Points
    4 935
    Par défaut
    Salut,

    Pour récupérer tes infos, tu peux utiliser une StringList.

    Pour ce faire, j'ai fait une petite fonction qui renvoie une chaine formatée.

    Dans le .h:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AnsiString __fastcall Explode(AnsiString Chaine,AnsiString Separateur);
    Dans le .cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    AnsiString __fastcall Explode(AnsiString Chaine,AnsiString Separateur)
    {
       AnsiString ChaineARetourner;
       TStringList *lst = new TStringList;
       lst->Text=Chaine;
       ChaineARetourner = StringReplace(lst->Text,Separateur,"\n",TReplaceFlags()<<rfReplaceAll<<rfIgnoreCase);
       lst->Free();
       return ChaineARetourner;
    }
    Un exemple d'utilisation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    __fastcall TForm1::TForm1(TComponent* Owner)
            : TForm(Owner)
    {
      AnsiString LigneFichierIni="a,b,c,d,e";
      TStringList *maListe = new TStringList;
      maListe->Text=Explode(LigneFichierIni,",");//Ici le séparateur est la virgule
      for (int i= 0;i<=maListe->Count-1;i++)
      {
        ShowMessage(maListe->Strings[i]); // A chaque passage, cela affichera a puis b... 
      }
    }
    J'ai mis le texte dans une StringList afin de pouvoir y accéder très facilement grâce aux indices.


    J'espère que celà t'aidera

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    216
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2007
    Messages : 216
    Points : 88
    Points
    88
    Par défaut
    Ok, mais comment je fais pour récupérer ma liste depuis le fichier ini?
    Dans l'exemple que tu me donnes, tu déclares la liste sachant a priori ce qu'elle vaut.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    AnsiString LigneFichierIni="a,b,c,d,e";
    Dans mon cas, le fichier INI suivant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    [Section Freq]
    Nfreq = 3
    F = 100.
        200.
        20000.
    pourrait évoluer et le nombre de fréquence changer par exemple.

    Donc, comment lire les fréquences (sous F) et les ajouter a un tableau par exemple a chaque retour de ligne rencontré?
    Le problème c'est que je suis obligé d'associer pour chaque valeur de fréquence une clé pour pouvoir ensuite utiliser la fonction ReadFloat...
    En fait, je ne veux pas avoir à écrire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    F1=100.
    F2=200.
    F3=20000.
    dans mon fichier INI.
    C'est possible?

  7. #7
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Points : 4 935
    Points
    4 935
    Par défaut
    Salut,

    Tu peux enregistrer tes valeurs comme ceci non :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Nfreq = 3
    F = 100;200;20000
    Il te suffirait alors de lire la chaine F à l'aide de ReadString puis, une fois cette chaine récupérer dans une variable, de faire un Explode...

    Il te suffira ensuite de faire la conversion de AnsiString vers les float ou les Int avec soit StrToInt ou StrToFloat.

    J'espère que j'ai répondu à ta question ...

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    216
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2007
    Messages : 216
    Points : 88
    Points
    88
    Par défaut
    ok je vais essayer ça, ça m'a l'air pas mal en effet.

    Merci

  9. #9
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Points : 4 935
    Points
    4 935
    Par défaut
    Y a pas de quoi!

    Tiens nous au courant

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

Discussions similaires

  1. Problème avec le fichier Desktop.ini
    Par alainyvan dans le forum Windows 7
    Réponses: 2
    Dernier message: 02/02/2014, 21h35
  2. problème avec un fichier .INI
    Par azräel dans le forum VB.NET
    Réponses: 6
    Dernier message: 09/03/2009, 22h42
  3. Problème d'identificateur fichier ini
    Par yanba dans le forum Langage
    Réponses: 7
    Dernier message: 19/02/2006, 00h21
  4. Problème avec des fichiers
    Par Stany dans le forum C++
    Réponses: 7
    Dernier message: 17/10/2005, 16h53
  5. Problème avec les fichiers .JPG
    Par cprogil dans le forum Langage
    Réponses: 5
    Dernier message: 10/06/2003, 15h44

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