Aus Datei Editfelder füllen
-
-
super es geht!!

ich habe mir schon sorgen gemacht, bei speichern der Datei wenn ich das ohne Leerzeichen mache, daß er das als ganzes sieht.
speichern:
TStringList *list = new TStringList(); list->Add(Edit1->Text); list->Add(Edit2->Text); list->Add(Edit3->Text); list->SaveToFile("c:\\test.txt"); delete list;laden:
TStringList *list = new TStringList(); list->LoadFromFile("c:\\test.txt"); //:) Edit4->Text=list->Strings[0]; Edit5->Text=list->Strings[1]; Edit6->Text=list->Strings[2]; delete list;BIG THX an euch und wünsche noch ein schönen Tag!
-
Hallo
allerdings solltest du beim Laden sicherstellen, das in der StringListe dann auch wirklich mindestens 3 zeilen sind, sonst gibt es eine Zugriffsverletzung.
bis bald
akari
-
sorry für das generve!
aber habe jetzt ein kleines Problem

ich hab das Speichern mal mit einer ComboBox1->ItemIndex ausprobiert das klappt.
aber wen ich das jetzt so schreibe,
TStringList *list = new TStringList(); list->LoadFromFile("c:\\test.txt"); Form2->ComboBox1->ItemIndex=list->Strings[0]; delete list;bringt er den typischen fehler
[C++ Fehler] Unit2.cpp(2830): E2034 Konvertierung von 'AnsiString' nach 'int' nicht möglichhab mir am anfang nicht gedacht das ich das benutzen kann, da es aber jetzt mit dem speicher des ItemIndex geht, muss ich es nicht erst umsetzen in ein Editfeld

nur wie kann ich den Int werte in nen string umwandeln, gibts da ne möglichkeit alle die im Button1 vorhandenen Int Variabeln in String umzuwandeln?
THX
-
siehe in der Hilfe zu
IntToStr
StrToInt
AnsiString::ToInt
-
Hallo
dein Ansatz ist schon richtig, wie du AnsiString nach umwandelst steht in der BCB-FAQ hier im Forum.
/Edit : Braunstein , wir scheinen beide wohl immer die Antworten uns gegenseitig wegnehmen wollen

bis bald
akari
-
jaja schon gut,
ich hau mir ja schon auf den hinterkopf

TStringList *list = new TStringList(); list->LoadFromFile("c:\\test.txt"); ComboBox1->ItemIndex= StrToInt(list->Strings[0]);aber ich hab na ne menge ComboBoxen und Checkboxen mit State

CheckBox1->State=StrToInt(list->Strings[1]);ah zu früh gefreut

das mit der CheckBox geht doch nicht er bringt mir ein fehler nicht im compiler sondern erst wen ich den button laden drücke irgendwas im debuger aber frag mich mal wie ich das verstehen soll !?!? HILFE
-
hawkdz schrieb:
aber frag mich mal wie ich das verstehen soll !?!? HILFE

Indem Du erst einmal die C++-Grundlagen lernst?
-
ja hast du vollkommen recht @ joe_m.
aber diese Festestellung hilft auch nicht wirklich weiter

aber danke das du mich so freundlich dran erinnerst!naja zum problem ich glaube ich muss ein memofeld auch mit den eizelnen strings aus und eingeben bzw laden.
kann es sein da er in den zeilen durcheinander kommmt den mit einem einzelnen CheckBox->State kommt er klar?
danke für die lernhilfe an alle

-
Hallo
oder indem du die betreffende Fehlermeldung hier mal postest?
Ich vermute mal das in der ersten zeile der Datei eben keine reine Ganzzahl steht.
/Edit : Außerdem weiß ich nicht wie du plötzlihc von ComboBox auf CheckBox kommst, und warum du CheckBox->State nimmst und nicht CheckBox->Checked
bis bald
akari
-
Ich hab mir das mal noch mal genauer angeschaut,
es sieht halt so aus, anhand dieses Beispiels:
speichern:TStringList *list = new TStringList(); list->Add(Memo1->Text); list->Add(CheckBox1->State); delete list;laden:
TStringList *list = new TStringList(); list->LoadFromFile("c:\\test.txt"); Memo1->Text=list->Strings[46]; CheckBox1->State=StrToInt(list->Strings[3]);wenn im Memofeld, 2 Zeilen stehen, kann es glaub ich ja so nicht gehen.
wie akari schon ein paar antworten vorher gesagt hat, daß die Zeilen in der Datei übereinstimmen müssen.also denke ich mal das ich das Memofeld auch einzeln in die Datei speichern muss?! Die eizelnen Strings mein ich
ich habe das Memofeld auf 5lines beschränkt und wenn ich jetzt alle 5 in die Datei schreibe und auch immer alle 5 auslesen lasse, das es egal sein wird ob sie alle befüllt worden sind oder nicht?!
-
Hallo
ich habe das Memofeld auf 5lines beschränkt
Aha, und wie?

und fällt dir dazu im Vergleich hierzu etwas auf?Memo1->Text=list->Strings[46];Wenn das kein Schreibfehler ist, hast du nicht wirklich begriffen was die Klammern machen.
bis bald
akari
-
@hawkdz
Alles was mehr als eine Zeile bringen kann (Memo) solltest du der Einfachheit halber lieber in eine eigene Datei speichern. TMemo::Lines ist ja schon vom Typ TStrings und kann ja so direkt geschrieben und gelesen werden.
-
ja das mein ich ja mit dem fehler, daß wen im memofeld 2 zeilen stehen das beim laden der datei, nur die zeile [46] ausgelesen wird.
aber ich brauche ja auch dann die 47 oder....
ja das mit einer weiteren datei ist aber nicht erwünscht, den beim laden möchte man ja nicht 20verschiedene dateien anklicken.
ich mach mir mal die arbeit und versuche es jetzt mit einzelausgabe des memofeldes.
ich habe es wie gesagt mit einer if abfrage auf 5 beschränktes können nur maximal 5 lines drinstehen, wenn ich jetzt nur 2 stehen habe hoffe ich das die anderen 3 nur als eine leere zeile gespeichert werden und beim laden auch nur als eine leere linestring eingefügt werden.
wie gesagt hoffe daß es so klappt, wen ihr noch ein tipp habt were super!
denn ch weis das die fragen die ich hier stelle manchen auf den geistgehen!
aber jeder hat man mal klein angefangen
BIGTHX
-
Du könntest ja bei jedem memofeld die Zeilenanzahl mit abspeichern. Eine Alternative wäre auch statt TStrings::SaveToFile ein eigenes Format (mit streams oder so) oder TIniFile zu Speichern und Laden zu verwenden.
-
nunja so geht das schon,
speichern:
TStringList *list = new TStringList(); list->Add(Memo1->Lines->Strings[0]); list->Add(Memo1->Lines->Strings[1]); list->Add(Memo1->Lines->Strings[2]); list->Add(Memo1->Lines->Strings[3]); list->Add(Memo1->Lines->Strings[4]); . . . list->SaveToFile("c:\\test.txt"); delete list;laden:
TStringList *list = new TStringList(); list->LoadFromFile("c:\\test.txt"); Memo1->Lines->Add(list->Strings[46]); Memo1->Lines->Add(list->Strings[47]); Memo1->Lines->Add(list->Strings[48]); Memo1->Lines->Add(list->Strings[49]); Memo1->Lines->Add(list->Strings[50]); . . .nur das jetzt die leeren strings im memofeld stören

wenn man jetzt noch eine zeile hinzufügen möchte dann macht er eben bei der line 6weiter und 3-5 sind leer
gibts vielleicht eine möglichkeit ein memofeld zu prüfen und alle nicht befüllten lines->Strings zu löschen?
-
Was spricht denn gegen sowas
TStringList *list = new TStringList(); list->Add(IntToStr(Memo1->Lines->Count)); // Anzahl ablegen list->AddStrings(Memo1->Lines); // gesamtes Memo ablegen . . . list->SaveToFile("c:\\test.txt"); delete list;dann einlesen
TStringList *list = new TStringList(); list->LoadFromFile("c:\\test.txt"); int count = list->Strings[0].ToInt(); // Anzahl wieder einlesen for( int i=0; i<count;++i) Memo1->Lines->Add(list->Strings[i+1]);
-
hallo noch mal,
versuche jetzt nach dem laden der datei, die lines im memofeld zu prüfen
if (Memo1->Lines->Strings[9] == ""); { Memo1->Lines->Delete(-1); }das funktz aber nicht, warum?
@Braunstein
ja sieht schon verständlich aus, nur ich habe insgasamt 12memofelder in denen bis zu 5 eiträge(lines) stehen können.ich muss ja dan sicher stellen, daß die cout abfrage immer am anfang in der datei steht, die ja dann auch zu dem passenden memofeld genommen wird hmmm....
ich werd aufjedenfall mal probieren, mal schauen ob ich das hinbekomme THX Braunstein
BIGTHX
-
wie müsste den der code aussehen um nur eine line im memofeld zu löschen?
-
Hallo
bitte schau doch wenigstens mal in die BCB-Hilfe. Oder erwartest du wirklich, das wir dir die ganze Hilfe vorlesen?
Memo1->Lines->Delete(0); // erste Zeile löschenJansen verweißt da gerne auf das Texteditor-Beispiel, das jeder Anfänger durcharbeioten soll.
bis bald
akari