Frage zu Arrays
-
Hallo
du darfst auch nicht einen Symbolnamen doppelt vergeben
TStringList *ausgabe; String ausgabe[3];desweiteren ist
Komme aber jetzt irgendwie nicht weiter!
keine Fehlerbeschreibung/Frage.
bis bald
akari
-
Hi,
okay stimmt. So kann man mir nicht helfen.
Wie gesagt, ich habe drei Felder wo ich eine eingabe tätigen kann. Dann habe ich einen Button, der diese drei eingaben in eine datei speichern soll. Einen Wert kann ich speichern. Die anderen 2 aber nicht. Wenn ich eine neue Eingabe mache. Dann wird der alte Eintrag überschrieben. Das soll auch nicht sein. Wie kann ich das jetzt bewerkstelligen, dass ich alle drei einträge speichern kann und darunter wieder neue. Später möchte ich das dann auch wiederauslesen können.
Ich bin soweit, das ich weiß, das ich Arrays dafür brauche. Weiß aber nicht so genau wie ich sie richtig einsetze. Mein bisheriger Code.
const String dateiname="projekttage.txt"; TStringList *ausgabe; ausgabe=new TStringList; ausgabe->Add (thema->Text); //hier sollen noch zwei weitere Felder in der gleichen Zeile eingetragen werden! ausgabe->SaveToFile(dateiname);
-
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 speichernbis 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()"?
-
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 Eintragsbis 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.