Daten in Textdatei ein und wieder auslesen



  • Hi
    ich (bin Anfänger) programmiere zur Zeit mit dem Borland C++ Builder,
    und möchte ein Programm schreiben um die Daten mehrerer Strukturen in
    einem bestimmten Format in eine Textdatei zu schreiben, und diese beim
    nächsten Programmaufruf wieder einzulesen.

    Die Textdatei sollte nachher genau so aussehen
    (vom Format her, nicht die Daten):

    1;08:00;12:00;J;MO;DI;MI;DO;;;
    2;09:15;18:00;N;;DI;;;FR;SA;SO
    3;00:00;00:00;N;;;;;;;
    4;00:00;00:00;N;;;;;;;
    ...usw...

    (Die Daten stehen zwischen den Semikoli)

    Ich weiß einfach nicht wie ich die Daten in dieses Format kriegen soll
    (Ich hab es mit TStringList versucht, aber dann stehen die Daten alle untereinander und nicht in diesem Format) und später die richtigen Daten in die richtigen Variablen(Ich weiß nicht ob das überhaupt geht, aus diesem Format heraus alles wieder an die richtige Stelle zu bringen).

    Ich wäre für jede Hilfe sehr dankbar,
    da ich mit meinem Latein am Ende bin.

    Schon jetzt vielen Dank
    Jan



  • Hallo

    TStringList ist schon richtig. Damit kannst du deine Datensätze zeilenweise ablegen. Nur die Zusammensetzung einer Zeiler aus einem Datensatz must du natürlich noch selbst machen.

    struct Record
    {
      int a;
      AnsiString b;
      AnsiString c;
    };
    
    ...
    TStringList* list = new TStringList();
    Record record;
    ...
    AnsiString row = IntToStr(record.a) + ";" + record.b + ";" + record.c;
    list->Add(row);
    

    bis bald
    akari



  • Erstmal danke für die schnelle Hilfe,
    aber ich bekomme leider einen Fehler.
    Wenn ich schreibe:

    TStringList* list=new TStringList();
    AnsiString line = "1" + ";" + profil.von + ";" + profil.bis;
    list->Add(line);
    list->SaveToFile("testfile");

    dann bekomme ich den Fehler:"Unzulässige Zeigeraddition" für die zweite Zeile
    (wahrscheinlich ist das + gemeint).
    Ich vermute der Fehler liegt in den verwendeten Variablen, bin mir aber nicht sicher. Meine Struktur sieht so aus:

    struct zeitpaar
    {
    int num;
    char von[6];
    char bis[6];
    bool pin;
    bool mo;
    bool di;
    bool mi;
    bool don;
    bool fr;
    bool sa;
    bool so;
    };

    Und noch etwas anderes: Was genau muss ich schreiben, wenn ich jetzt zum
    Beispiel den Wert von profil.von nach Neustart des Programms aus der Textdatei, in die Variable lesen möchte?

    Es wäre super wenn ihr mir nochmal helfen könntet.
    Nochmals vielen Dank
    Jan



  • Hallo

    das liegt daran das das "1" als String-Literal und damit als C-String interpretiert wird. und C-Strings kannst du nicht so einfach addieren.

    Um das zu umgehene must du nur expliziert in AnsiString umwandeln, um am Anfang der Additionskette einen echten AnsiString zu haben.

    AnsiString line = AnsiString("1") + ";" + profil.von + ";" + profil.bis;
    

    Bitte benutz beim nächsten Mal zum Posten von Quellcode die C++ Tags.

    bis bald
    akari



  • Hi
    hast recht, so funktioniert es.
    Jetzt hab ich die Ausgabe schon mal fertig,
    bleibt noch das einlesen des Files.
    Soweit ich das verstanden hab, kann ich jetzt nur noch
    die einzelnen Zeilen ansprechen wenn ich das File einlesen will,
    oder gibt es eine Möglichkeit die Zeilen wieder in ihre Bestandteile zu zerlegen, und auf die Variablen zu verteilen?

    Danke für die Hilfe
    Jan



  • Hallo

    natürlich must du beim Einlesen (am besten wieder mit TSTringList, da bekommst du schon mal die einzelnen Zeilen) noch die Zeil auseinandernehmen. Dazu brauchst du die AnsiString-Methoden wie Pos und SubString.

    bis bald
    akari



  • Hi
    Ich glaub jetzt krieg ich es hin.
    Nochmals tausend Dank, ohne deine Hilfe säße ich echt in
    der Tinte.

    Bis zum nächsten mal
    Jan



  • Akari hat doch wieder gute Laune...
    Er hilft jetzt sogar bei den Hausaufgaben...

    Ist nicht boese gemeint, akari !
    Du bist der Beste !

    Bis Bald...
    wNw



  • Hallo

    @ wNw : na so was wie gestern kann nun wirklich nicht meine Laune gefährden 😉

    und hier hab ich ja nur Tips gegeben, Jan12345 hat selber den entscheidenen Rest gemacht und was draus gelernt. So solls sein.

    bis bald
    akari



  • So solls sein !

    Bis Bald...
    wNw


Anmelden zum Antworten