Frage zu Arrays



  • Hallo

    wo liegt das Problem?

    ausgabe->Add (thema->Text); // Wert von Control thema wird eingetragen 
    ausgabe->Add (thema2->Text); // Wert von Control thema2 wird eingetragen
    ausgabe->Add (thema3->Text); // Wert von Control thema3 wird eingetragen
    ausgabe->SaveToFile(dateiname); // Alles zusammen speichern
    

    bis bald
    akari



  • Richtig. Das geht. Aber es sollen jetzt noch weitere Daten in die Datei geschrieben werden. Sprich. Ich leere meine Eingabefelder schreibe etwas neues hinein und jetzt soll das auch in der Datei stehen. Wie geht sowas denn.



  • Hallo

    indem du die bestehende Datei vorher einliest

    TStringList *ausgabe;
    ausgabe=new TStringList;
    ausgabe->LoadFromFile(dateiname); // bestehenden Dateiinhalt einlesen
    ausgabe->Add (thema->Text);
    ausgabe->SaveToFile(dateiname);
    delete ausgabe; // nicht vergessen !
    

    bis bald
    akari



  • Hi,

    gut okay. Hätte mir auch selber einfallen können. Aber mal noch eine Frage zu dieser Thematik. Ich trage nun in die Textdatei jeweils immer drei neue Daten ein. Diese Daten gehören an sich zusammen. Wie kann ich es jetzt machen das ich diese drei zusammenhängenden Daten wieder zusammen auslesen kann?



  • Hallo

    da lädts die Datei in eine TStringList. Dort kannst du die Zeilen mit dem Array TStringList->Strings[] von 0 bis TStringList->Count durchgehen. Da bei die immer drei Zeilen zusammengehören, kannst du also immer drei Zeilen einem Eintrag zuordnen.

    bis bald
    akari



  • KlausB schrieb:

    ausgabe->SaveToFile(dateiname.c_str());
    

    Wieso ".c_str()"?


  • Mod

    Hallo

    du hast recht c_str() ist Quatsch - ist doch nur ein AnsiString
    (sollte mal etwas weniger arbeiten und gleichzeitig hier posten)

    MfG
    Klaus



  • Hmm,

    okay. Also so oder wie?

    Label5->Caption = eingabe->Strings[2];

    ?



  • Hallo

    ja, das holt die dritte Zeile aus eingabe. Achtung : wenn es die nicht gibt, kommt eine Exception, also die Grenzen des Arrays beachten.

    bis bald
    akari



  • und wie kann ich alle auslesen?

    while schleife? oder wie!



  • UrsaMajor schrieb:

    while schleife? oder wie!

    Jepp. Oder for(...; ...; ...), falls dir das besser liegt.



  • Hi,

    sry das ich nochmal so doof frage, aber.

    Ich habe dann eine while schleife wie kann ich ihm sagen das nun schluss ist. das er nicht weiterzählt? und alle daten sollen in einem feld ausgegeben werden?



  • Ich zitier da einfach mal jemand anders (im Übrigen auch aus diesem Thread):

    akari schrieb:

    Dort kannst du die Zeilen mit dem Array TStringList->Strings[] von 0 bis TStringList->Count durchgehen.



  • Hallo

    da eingabe bereits ein Array ist, läßt du alle Werte dort drinnen, und holst dir nur die gerade anzuzeigenden Werte :

    TStringList *eingabe;
    ... // Datei in eingabe einlesen
    int RecordCount = eingabe->Count / 3; // Anzahl der vorhandenen Einträge bestimmen
    ...
    int CurrRecord = 2; // Dritter Eintrag soll gelesen werden
    AnsiString Text1 = eingabe->Strings[CurrRecord *3]; // erste Zeile des dritten Eintrags
    AnsiString Text2 = eingabe->Strings[CurrRecord *3 +1]; // zweite Zeile des dritten Eintrags
    AnsiString Text3 = eingabe->Strings[CurrRecord *3 +2]; // dritte Zeile des dritten Eintrags
    

    bis bald
    akari



  • Hi nochmal,

    danke für die gute hilfe. eine sache ist dennoch komisch! Folgender Code:

    const String dateiname="projekttage.kpt";
    	TStringList *eingabe;
    	eingabe=new TStringList;
    	eingabe->LoadFromFile (dateiname);
        int maxeintrag = eingabe->Count / 3;
        Label5->Caption = maxeintrag;
        int welchereintrag = 0;
        for (int a=1;a<maxeintrag;a++) {
        AnsiString texta = eingabe->Strings[welchereintrag *3];
        AnsiString textb = eingabe->Strings[welchereintrag *3 +1];
        AnsiString textc = eingabe->Strings[welchereintrag *3 +2];
        AnsiString text, mastertext;
        mastertext = texta+"\n"+textb+"\n"+textc+"\n"+text;
        text = mastertext;
        Label6->Caption = mastertext;
        welchereintrag=welchereintrag+a;
    

    Der mastertext wird ausgegeben, jedoch immer nur das letzte array. es sollen aber alle angezeigt werden. ist doch so richtig oder?



  • Hallo

    also mir kommen da doch ein paar Bedenken...

    - wo ist denn die Schleife zuende? Ich seh nur öffnende Klammer.
    Dies ist wichtig, da dadurch nur der letzte Wert deine Schleife verläßt, denn alle Variablen werden in der Schleife deklaraiert und damit auch initialisert

    - was stellst du dir denn unter der Bedingung der Schleife vor?

    for (int a=1;a<maxeintrag;a++) {
    ...
    welchereintrag=welchereintrag+a;
    

    nur a ist dein Index, wozu brauchst du welchereintrag

    - was soll das ?
    [cpp]mastertext = texta+"\n"+textb+"\n"+textc+"\n"+text;
    text = mastertext;[/cpp]
    Du hast viel zuviele Variablen, und weist denn kreuz und quer Zeug zu.

    - wohin soll denn die Ausgabe erfolgen? Beachte : Es macht keinen Sinn, die einzelnen Zeilen aus der StringList in einen String zu schreiben!
    Und wenn, dann nimm ganz einfach TStringList->Text

    - /Edit : Wenn du alle Daten auf einmal anzeigen willst, nimm doch statt TEdit ein TListBox

    ListBox1->Items->Assign(StringList);
    

    fertig.

    bis bald
    akari



  • Ich denke mal, der Hauptfehler ist, dass mastertext in der Schleife immer wieder neu deklariert und demzufolge gelöscht wird. Weswegen nur der letzte Eintrag sichtbar wird.


Anmelden zum Antworten