(ini)alle Werte ohne den Key aus einer Section in memo ausgeben



  • moin zusammen,

    jetzt werden sich einigen denken der schon wieder und seine "ini" ­čśâ jow ­čśâ

    na ja , es geht darum das in alle meine werte aus der ini in einer memo saugeben will.. zb.

    schaut so meine Section aus:
    [Abschnitt1]
    Key1=Wert1
    Key2=Wert2
    Key3=Wert3

    ich will das die in der memo so dar gestellt werden:
    Wert1
    Wert2
    Wert3

    ich hab schon die ganz zeit versucht wie ich es machen kann.

    Memo1->Lines->Add(ini->ReadString("Name",IntToStr(sList++),NULL));
    

    so gibt er immer den ersten Wert aus. ­čś×

    Naja ich denke mal der ansatz ist Richtig sprich das er nen String aus der ini lesen soll in der Section "Name" und dann frage ich mich wie mach ich dem ganzen klar das alle Werte nehmen soll ohne die schl├╝ssel.

    jemand nen tip, bitte keien fertige l├Âsung (hilft ja ned weiter)

    mfg

    |23|



  • schau mal unter ReadSectionValues in der BCB-Hilfe



  • Einige Fragen zum Tag zu denen du dir mal Gedanken machen und die Antworten hier reinschreiben solltest:
    1. Hast du dir die restlichen Methoden von TIniFile schon mal genauer angeschaut? (z.B. ReadSection*)
    2. Wieso ├╝bergibst du als dritter Parameter NULL?
    3. Was beinhaltet "sList" bzw. wer ist "sList"?
    4. Was liefert "ReadString" zur├╝ck? (Die Ergebnisse mal mit dem Debugger pr├╝fen!)
    5. Was treibt sList w├Ąhrend deiner Programmdurchl├Ąufe?

    ...

    sollte f├╝rn Anfang reichen...



  • gut mein ansatz war doch etwas falsch.. ja die Methoden hab ich mir durch gelesen naja die mir schon vom name her helfen k├Ânnten.. den z.b. "DeleteKey" brauch ich in dem fall ja ned durch zulesen...

    nun weiter im text.:

    Gibt nur die Key aus:

    ini->ReadSection("Name",Memo1->Lines);
    

    Gibt die Keys und die Werte aus:

    ini->ReadSectionValues("Name",Memo1->Lines);
    

    und das dumme an ReadString ist das er nur 1 wert ausgeben kann und nicht gleich alle ­čś× wie bl├Âde auch ­čśâ ­čśí

    ist aber noch ned mein Ziel ­čśâ



  • Dann geh├Ârt wohl noch ein Zwischenschritt hin? Was erwartet ReadSectionValues denn als Parameter?

    -junix



  • (const AnsiString Section, Classes::TStrings* Strings);

    Der Parameter Strings kann auf ein TStrings-Objekt zeigen oder auf eine Komponenteneigenschaft, wie z.B. Items f├╝r eine TListBox-Komponente, die selbst ein TStrings-Objekt darstellt.

    da werd ich nur so draus schlau das ReadSectionValues halt die Section erwartet und wo er sie ausgeben kann und das kann ein TStrings-Objekt sein.



  • Na also.. und statt das hald direkt in das Memo rauszubr├Âseln kannst du das Ergebnis ja erst zwischenspeichern und passend nach deinen w├╝nschen filtern, indem du hald statt der Eigenschaft Lines einfach deine eigne Instanz eines TStrings-Objekts ├╝bergibst?

    -junix



  • danke guter tip:

    ini->ReadSectionValues("Name",sList2);
    

    und nu ?

    ini->ReadSectionValues("Name",sList2);
    int i = sList2->???????;
    Memo1->Lines->Add(i);
    

    ...ich find keiner von dem Methoden die mir helfen k├Ânnte ­čś× hab mir alle durch gelesen



  • Eigenschaften wie Keys und Values sind dir auch noch nicht aufgefallen?

    -junix



  • jab jetzt hab ich mich da acuh durch gelesen leider bittet der BCB kein beispiel. nur :

    _property AnsiString Values[AnsiString Name] = {read=GetValue, write=SetValue};

    woraus ich irgendwie ned schlau werde ­čś×



  • unter ReadSectionValues ist auch ein Beispiel zu der Eigenschaft Values von TString...

    nat├╝rlich k├Ânntest du auch mit Hilfe der AnsiString-Funktionen jede Zeile der Stringlist nach dem "=" absuchen und den darauffolgenden Teil in irgendeiner Form in einer Liste darstellen, z.b. ├╝ber SubString, Pos und ├Ąhnliches

    [Edit] schau dir auch mal die Verwendung von TStringList an



  • Hab ich alles, und alles taugt nix fuck nur zum aufregen ­čśâ

    mit ini->ReadSectionValues("Name",ListBox1->Items); bekomme ich die ganze Section ausgegeben ich will aber nur alle "Values" haben und den den scheiss key und das = zeichen !!



  • Statt dich verbal in die Gosse zu begeben w├╝rdest du dich besser mal um das k├╝mmern was man dir gesagt hat?

    Folgende Eigenschaften und Methoden, vereint in einer kleinen Funktion f├╝hren zur L├Âsung:
    TMemo::Lines::Add
    TStringList::Names
    TStringList::Values

    Wenn du etwas nicht schnallst wies beschrieben ist, frag nach. Aber frag gezielt nach und nicht "woraus ich irgendwie ned schlau werde ".

    _property AnsiString Values[AnsiString Name] = {read=GetValue, write=SetValue};
    

    Diese Zeile ist die Deklaration des Property "Values". Was verstehst du daran nicht? Welches sind die unbekannten in dieser Deklaration? Kannste vielleicht irgend was n├Ąheres in der Borland-Hilfe dazu erfahren? Gibt es da vielleicht nicht auch was dazu in der FAQÔäó? Was bringt eine Suche nach TStringList und Values im VCL Forum - oder gar in den Usenet-Groups? Hast du vielleicht eine Theorie wie man das Teil da verwenden k├Ânnte? Hast du die Theorie schon getestet? Wie sieht die Theorie aus? Wieso hast du die Theorie noch nicht getestet? ...

    Fragen ├╝ber Fragen die du dir stellen solltest... aber was schreib ich hier ├╝berhaupt. Meinen Hinweisen folgst du ja eh ned. W├Ąre hald mit Arbeit verbunden...

    -junix

    EDIT: Ausserdem hat Linnea auch bereits alternativvorschl├Ąge gemacht mit denen man arbeiten k├Ânnte, statt hier rumzufluchen. Wieso bist du diesen Vorschl├Ągen nicht nachgegangen?



  • Nur mal als Frage junix. Seit wann hat TStringList eine Eigenschaft namens Keys? Ist das mit BCB6 eingef├╝hrt worden? Bei mir (BCB5) heisst die ├Ąquivalente Eigenschaft Names.



  • Stimmt... Names w├Ąre der korrekte Eigenschaft... hab keine VCL-Hilfe in der N├Ąhe und alels ausm Kopf zusammenzudr├Âseln is etwas schwierig (o;



  • junix schrieb:

    Fragen ├╝ber Fragen die du dir stellen solltest... aber was schreib ich hier ├╝berhaupt....

    Aber Sokrates w├Ąhre stolz auf Dich gewesen. ­čÖé



  • void __fastcall TForm1::BitBtn1Click(TObject *Sender)
    {
    ListBox1->Clear();
    
    ini->ReadSection("Name",ListName);
    ini->ReadSection("Vorname",ListVorname);
    ini->ReadSection("Nummer",ListNummer);
    
    int i = 0;
    
    while ((i < ListName->Count) && (i < ListVorname->Count))
    {
    AnsiString asName,asVorname,asNummer;
    asName = ini->ReadString("Name",IntToStr(i+1),"");
    asVorname = ini->ReadString("Vorname",IntToStr(i+1),"");
    asNummer = ini->ReadString("Nummer", IntToStr(i+1),"");
    
    if ((ListName->Strings[i]) == (ListVorname->Strings[i]))
         {
         ListBox1->Items->Strings[i] = AnsiString(asName) + " " + asVorname + " "+asNummer;
         }
    i++;
    }
    }
    

    vieleicht nicht sch├Ân aber es rennt sauber.



  • |23| schrieb:

    vieleicht nicht sch├Ân aber es rennt sauber.

    Und wenn da zwischen drinn ein Record fehlt? also Sektion 1, 2, 4 und 5 existieren?

    -junix



  • dieses kann ja nicht passieren da alle eingeben so gemacht werden das er automatisch immer im Key 1,2,3,4 usw. eintr├Ąg und immer von der letzten Position anf├Ąngt, sprich ich bin beim Eintrag 23 und wenn ich einen weitern Eintrag mache mach lautet der Schl├╝ssel 24.

    aber dieses ist jetz nicht so schlim den jetzt will ich f├╝r das ganze ne suchfunktion schreiben. und diese soll nicht so simpel sein wie meien nadere:

    for (int i=0; i<=AusgabeMemo1->Lines->Count; i++)
    
       if (AusgabeMemo1->Lines->Strings[i].Pos(SucheEdit1->Text))
    
             Memo1->Lines->Add(AusgabeMemo1->Lines->Strings[i]);
    

    es soll so gesucht werden das ich einen in ein Edit feld z.b das wort i eingebe und er mir alle eintrage zeigt die mit i anfangen und geb ich nahc dem i da g ein z.b ig soll er das automatisch erkennen und alle ergebnise mir ig ausgeben usw...

    mfg
    |23|



  • Da dein Ansatz zwar funktioniert aber auf lange sicht in den Abgrund f├╝hrt, empfehle ich mal folgendes St├╝ck Code zu testen:

    TStringList *list_TSLp = new TStringList();
    list_TSLp->Text = "Key1=Val1\r\nKey2=Val2\r\nKey3=Val3\r\n";
    ShowMessage(list_TSLp->Values["Key2"]);
    delete list_TSLp;
    

    -junix


Log in to reply