INI File mit TStringList Aufzählung auslesen



  • Hallo,

    ich hoffe jemand kann mir helfen, ich versuche aus einer INI Datei einen Bereich auszulesen in dem mehrere EMailAdressen aufgelistet sind. Leider klappt es noch nicht. Kann mir jemand helfen?

    int iCount;
    
        // Struktur anlegen
        struct T_Settings{
    
            AnsiString strPfad;
            TStringList *tListMailAddresse;
        };
        T_Settings Settings;
    
        //INI File festlegen, welches ausgelesen werden soll
    
        TIniFile *Ini = new TIniFile("C:\\Backup\\test.ini");
    
        // INI auslesen
        if(Ini != NULL)
        {
         Ini->UpdateFile();
    
         //INI-Zeile auslesen, wobei common dem Bereich entspricht und EinPfad einer betimmten Zeile
         Settings.strPfad = Ini->ReadString("common", "EinPfad", "" );
    
         //Neue StringListe anlegen
         Settings.tListMailAddresse = new TStringList;
    
         //Zeilen zählen
         Ini->ReadSectionValues("bla", Settings.tListMailAddresse);
         iCount = Settings.tListMailAddresse->Count;
    
         //Zeilenanzahl ausgenben zur Überprüfung
         AnsiString test = iCount;
         MessageBox(NULL, test.c_str() , "icont", MB_OK);
    
         //Jede Zeile auslesen
         for(int i = 0; i<iCount; i++)
            {
            //Settings.tListMailAddresse = Ini->ReadString("bla", "Mail0", "");
            }
         //Pfad ausgeben zur Kontrolle, kann später wieder entfernt werden
         MessageBox(NULL, Settings.strPfad.c_str() , "INI", MB_OK);
    
         //Variablen leeren
         delete Ini;
         Ini = NULL;
        }
    


  • 1. "Leider klappt es noch nicht" ist keine ausreichende Fehlerbeschreibung

    2. Was willst du damit machen?

    //Jede Zeile auslesen 
         for(int i = 0; i<iCount; i++) 
            { 
            //Settings.tListMailAddresse = Ini->ReadString("bla", "Mail0", ""); 
            }
    


  • Über diese Zeile bin ich mir eben unklar. In meinem INI File habe ich 3 EMail Adressen, die ich alle drei einer Variable zum weiteren Einsatz übergeben will. Leider bekomme ich immer wieder Fehlermeldungen.

    Meine INI sieht folgendermaßen aus:

    [common]
    EinPfad=U:\Eigene Dateien\WORDProbleme\Neu Microsoft Word-Dokument (2).doc
    Nochwas=1
    [bla]
    Mail0="stern@test.de"
    Mail1="mond@test.de"
    Mail2="sonne@test.de"
    


  • Du hast doch ein Stringlist (tListMailAddresse) in die du die Einträge eingelesen hast. Du mußt sie da nur noch raus holen. Kleine Tipp: schau mal in die Hilfe zu TStringList::Strings
    Noch was. Wenn du die StringList schon in eine struct packst. könntest du sie da auch gleich im Konstruktor erzeugen und im Destruktor wieder löschen.

    struct T_Settings
    {
       AnsiString strPfad;
       TStringList *tListMailAddresse;
       T_Settings()
       {
          tListMailAddresse = new TStringList;
       }
       ~T_Settings()
       {
          delete tListMailAddresse;
       }
    };
    

    Das finde ich irgendwie sauberer.



  • Hallo

    Leider bekomme ich immer wieder Fehlermeldungen.

    WAS für Fehlermeldungen?

    Ich vermute einfach mal das soll so aussehen

    Settings.tListMailAddresse->Add(Ini->ReadString("bla", "Mail0", ""));
    

    bis bald
    akari



  • Das macht diese Zeile schon

    Ini->ReadSectionValues("bla", Settings.tListMailAddresse);
    

Anmelden zum Antworten