TStringList speichern
-
Hallo,
Das geht auch...
Aber es gibt ja wie immer mehrere Lösungen für ein Problem. Und welche man nimmt ist Geschmackssache.
Bis dann denn,

Nash
-
Nash schrieb:
Hallo,
Warum einfach wenn's auch kompliziert geht...

Macht das doch einfach so :
[cpp]
TStringList *Liste = new TStringList();
if (FileExists(ExtractFilePath(Application->ExeName) + "cbInhalt.txt"))
Liste->LoadFromFile(ExtractFilePath(Application->ExeName) + "cbInhalt.txt");
ComboBox1->Items->Clear(); // Falls noch was drin ist...
ComboBox1->Items->AddStrings(Liste);
delete Liste;
Liste = NULL;
[/cpp]Nash
Viel zu umständlich. Ob eine Datei existiert fängt man sicherheitshalber komplett mit Exceptions ab.
Nimm einfach:ComboBox1->Items->CommaText = List->CommaText;Dann brauchst du dich auch nicht darum zu kümmern ob deine ComboBox eventuell schon Items enthält.

-
ComboBox1->Items->Assign(Liste);kannst du natürlich auch dafür nehmen.
AddStrings findet seine Anwendung nur im hinzufügen von String zur StringListe.
-
Hallo,
Ob eine Datei existiert fängt man sicherheitshalber komplett mit Exceptions ab.
Mmmh... deshalb funktionieren die meisten Programme auch so toll...
"Ich muß nicht darauf achten, ob ich mit meinem Auto gegen eine Wand fahre, dafür habe ich meinen Airbag"
.ComboBox1->Items->CommaText = List->CommaText;
Und wenn, warum "CommaText" und nicht "Text" ?
AddStrings findet seine Anwendung nur im hinzufügen von String zur StringListe.
Und von welchem Typ ist Items ?

... genau "TStrings"...Bis dann denn,

Nash
-
Nash schrieb:
Hallo,
Ob eine Datei existiert fängt man sicherheitshalber komplett mit Exceptions ab.
Mmmh... deshalb funktionieren die meisten Programme auch so toll...
"Ich muß nicht darauf achten, ob ich mit meinem Auto gegen eine Wand fahre, dafür habe ich meinen Airbag"
.ComboBox1->Items->CommaText = List->CommaText;
Und wenn, warum "CommaText" und nicht "Text" ?
AddStrings findet seine Anwendung nur im hinzufügen von String zur StringListe.
Und von welchem Typ ist Items ?

... genau "TStrings"...Bis dann denn,

Nash1.Du fängst leider nur mit deiner Abfrage ab, ob deine Datei existiert.Was ist aber wenn du keine Leserechte für diese Datei besitzt.
Genau deshalb nimmt man Exceptions.
2. Nicht dein ernst oder ? Lies mal in der Hilfe nach.
3.Wozu ?
Du willst doch nur den kompletten Inhalt von deiner TStringList in deine ComboBox kopieren...
-
Hallo,
Was ist aber wenn du keine Leserechte für diese Datei besitzt.
Das dürfte ja wohl ein sehr spezieller Fall sein, der hier zu 99% nicht zutrifft...

2. Nicht dein ernst oder ?
Wo ist das Problem ?

3.Wozu ?
Warum nicht ?
"Items" ist vom Typ "TStrings", "TStringList" auch... wo ist das Problem ?Bis dann denn,

Nash
-
Nash schrieb:
Das dürfte ja wohl ein sehr spezieller Fall sein, der hier zu 99% nicht zutrifft...

So ein Pech für dich, leider sind gute Programme darauf bedacht, hundert Prozent aller Fälle abzudecken. Und so speziell ist der Fall überhaupt nicht.
Nash schrieb:
"Items" ist vom Typ "TStrings", "TStringList" auch... wo ist das Problem ?
Aua. Wegen Leuten wie dir muss ich mir in regelmäßigen Abständen eine neue Tischplatte kaufen. Schonmal die Objekthierarchie gesehen?
-
1. 99%? Woher hast du diese Zahl ? Sicherlich beim normalen Einzelplatz User trifft das zu.
Was ist im Firmennetzwerk ? Da gibt es etliche Bereiche wo man berechtigterweise keinen Zutritt(Berechtigung) hat.Mach es einmal so:
TStringList* List = new TStringList(); List->Add("Test"); List->Add("Test,2"); List->Add("Test,3"); ComboBox1->Items->CommaText=List->CommaText ; delete List;und dann so:
TStringList* List = new TStringList(); List->Add("Test"); List->Add("Test,2"); List->Add("Test,3"); ComboBox1->Items->CommaText=List->Text; delete List;Kleiner aber feiner Unterschied.

3.Ich weiss doch vorher schon wieviel Platz meine StringList belegt.
Muss doch eigentlich nichts "adden" sondern nur komplett rüberschieben.
-
Hallo,
Dasd
So ein Pech für dich, leider sind gute Programme darauf bedacht, hundert Prozent aller Fälle abzudecken.Zeige mir das Programm, das 100% alle auch nur erdenklichen Fälle abdecken kann.

Bei Deiner Homepage kann man das nicht gerade sagen :No write permission on '/is/htdocs/wp1008337_O8EB1ILLQC/www/webspace/eastsoft/crafty/templates_c/'. Please grant write access for theuser / process running php.
Dasd
Aua. Wegen Leuten wie dir muss ich mir in regelmäßigen Abständen eine neue Tischplatte kaufen.Nicht in dem Ton Freundchen...
Wenn Du Kritik äußern willst dann tu das, aber konstruktiv und nicht einfach irgendwas in den Raum werfen, nur um sich mal zu Wort zu melden.@ Meister Röhrich :
Mir ist der Unterschied schon bewusst. Ich glaube aber nicht, daß das in diesem Fall zutreffend ist. Es sollen doch die Einträge aus einer ComboBox gespeichert und wieder geladen werden. Außerdem soll der Eintrag aus einem "Edit" zur Liste hinzugefügt werden. Was ist nun, wenn ein Komma im Eintrag des "Edit" ist. Das soll beim nächsten Laden bestimmt wieder nur eine Zeile werden und nicht zwei, oder...Sicherlich beim normalen Einzelplatz User trifft das zu.
Was ist im Firmennetzwerk ? Da gibt es etliche Bereiche wo man berechtigterweise keinen Zutritt(Berechtigung) hat.Ich bestreite ja nicht das dieser Fall eintreten kann. Ich meine nur, daß das in diesem speziellen Fall etwas übertrieben wäre. Und was gibst Du dann für eine Fehlermeldung aus ? Doch wahrscheinlich : Kann die Datei "xyz" nicht öffnen. Naja gut, auch nicht sehr aussagekräftig. Wenn man schon alles Mögliche abfangen will, dann sollte man die API zu Hilfe nehmen und testen, ob man z.B. die Berechtigung hat oder nicht.
Bis dann denn,

Nash
-
Hallo,
Nur mal so am Rande erwähnt :
BCB-Hilfe : Add, AddStrings, Find (Beispiel)
Zu diesem Beispiel gehören eine Liste und eine Beschriftung (Label). Nach dem Start der Anwendung wird ein Stringlisten-Objekt erzeugt und mit drei Strings gefüllt. Die Methode Find durchsucht die Strings nach dem Vorkommen des Strings 'Blumen'. Wenn dieser String gefunden werden kann, wird die komplette Stringliste in das Listenfeld eingefügt, und der Indexwert von 'Blumen' erscheint als Beschriftungstext.
[cpp]
void __fastcall TForm1::Button1Click(TObject Sender)
{
int Index;
TStringList MyList = new TStringList();
try
MyList->Add("Animals");
MyList->Add("Flowers");
MyList->Add("Ocean");
MyList->Sort(); // Find funktioniert nur bei sortierten Listen
if (MyList->Find("Flowers", Index))
{
ListBox1->Items->AddStrings(MyList);
Label1->Caption = "Flowers has an index value of " + AnsiString(Index);
}
__finally
{
delete MyList;
}
}
[/cpp]Bis dann denn,

Nash
-
Mir ist der Unterschied schon bewusst. Ich glaube aber nicht, daß das in diesem Fall zutreffend ist. Es sollen doch die Einträge aus einer ComboBox gespeichert und wieder geladen werden. Außerdem soll der Eintrag aus einem "Edit" zur Liste hinzugefügt werden. Was ist nun, wenn ein Komma im Eintrag des "Edit" ist. Das soll beim nächsten Laden bestimmt wieder nur eine Zeile werden und nicht zwei, oder...
??????

Save:TStringList* List = new TStringList(); List->Add("Test"); List->Add("Test,2"); List->Add("Test,3"); List->SaveToFile("liste.txt"); delete List;Load:
TStringList* List = new TStringList(); List->LoadFromFile("liste.txt"); //Wenn man nur "Anzeige" braucht dann nimmt man Combobox1->Items->LoadFromFile(); ComboBox1->Items->CommaText = List->CommaText;//Nehme ich nun.Punkt. Assign geht auch. delete List;Ja das meint man meistens.
Bis man sein schön funktionierendes Programm von zu Hause mal woanders laufen lässt und dann auf einem anderen Rechner eine Fehlermeldung kassiert(im günstigsten Falle).
-
anderes Beispiel aus der Hilfe:
[cpp]
TStrings StringList = new TStringList();
try
{
StringList->Add("In diesem Beispiel wird eine Stringliste verwendet.");
StringList->Add("Das ist die einfachste Möglichkeit, Strings");
StringList->Add("in ein Kombinationsfeld einzufügen.");
StringList->Add("Nicht vergessen: Die Methode TStrings ");
StringList->Add("ist virtuell. Erstellen Sie statt dessen ");
StringList->Add("eine Stringliste.");
ComboBox1->Width = 210;
ComboBox1->Items->Assign(StringList);//Ich hab mich nunmal an CommaText gewöhnt.
ComboBox1->ItemIndex = 0;
}
__finally (...)
{
delete StringList;
}[/cpp]
-
In diesem Beispiel wird eine Stringliste verwendet.
Das ist die einfachste Möglichkeit, Strings in ein Kombinationsfeld einzufügen.
Nicht vergessen: Die Methode TStrings ist virtuell. Erstellen Sie statt dessen eine Stringliste.Steht eigentlich alles drinne.
-
Nash schrieb:
Zeige mir das Programm, das 100% alle auch nur erdenklichen Fälle abdecken kann.

Habe ich nie behauptet. Aber ein Programm sollte nicht bewusst Fälle von vornherein ignorieren, weil sie nur unwahrscheinlich sind.
Nash schrieb:
Bei Deiner Homepage kann man das nicht gerade sagen :
No write permission on '/is/htdocs/wp1008337_O8EB1ILLQC/www/webspace/eastsoft/crafty/templates_c/'. Please grant write access for theuser / process running php.
Was hast du dagegen? Das Programm erkennt den Fehler korrekt und weist den Anwender darauf hin, was zu tun ist. Und das werde ich jetzt auch gleich mal. ähem, räusper, hüstel
Nash schrieb:
Wenn Du Kritik äußern willst dann tu das, aber konstruktiv und nicht einfach irgendwas in den Raum werfen, nur um sich mal zu Wort zu melden.
Hättest du auch den Rest des Absatzes gelesen, wüsstest du schon was ich meine. Aber wie gesagt, meine arme Tischplatte eben... :p Aber weil heute Ostermontag ist, zitiere ich noch einmal extra für dich:
BCB-Hilfe schrieb:
TStringList implementiert die von TStrings eingeführten abstrakten Eigenschaften und Methoden und führt selbst neue Eigenschaften, Ereignisse und Methoden ein, die...
-
Hallo,
Oh man... eigentlich habe was anderes zu tun...

Aber OK.Habe ich nie behauptet.
Doch hast Du...
leider sind gute Programme darauf bedacht, hundert Prozent aller Fälle abzudecken
...aber egal...

TStringList implementiert die von TStrings eingeführten abstrakten Eigenschaften und Methoden und führt selbst neue Eigenschaften, Ereignisse und Methoden ein, die...
Ja und, heisst das ich darf das jetzt nicht so machen auch wenn es in der Hilfe als Beispiel vorhanden ist... och menno... :p
Ahja, ich kann mir jetzt vorstellen, warum Deine Tischplatte andauernd kaputt ist... aber keine Angst, Du lernst das auch noch...

@ Meister Röhrich :
Mir ist jetzt erst aufgefallen, daß Du mich vollkommen mißverstanden hast.ComboBox1->Items->CommaText=List->Text;Das geht natürlich nicht. Ich meinte :
ComboBox1->Items->Text = List->Text;Das sollte genau das gleiche sein, oder...
Mein Post :
Mir ist der Unterschied schon bewusst. ...
Kannst Du damit ignorieren
.P.S.:
Mir ist es übrigens Wurscht, ob man nun "Assign", "AddStrings" oder was auch immer benutzt. Ist doch Geschmackssache und kommt auch auf den Verwendungszweck an. Ich mache es so und Du eben anders... na schön, warum auch nicht. Beides funktioniert und erfüllt seinen Zweck.Bis dann denn,

Nash
-
@ Meister Röhrich :
Mir ist jetzt erst aufgefallen, daß Du mich vollkommen mißverstanden hast.
...
Das sollte genau das gleiche sein, oder...Ist es aber eben nicht.

-
Hallo,
Kannst Du oder willst Du nicht verstehen ?

Wo ist hier der Unterschied im Ergebnis ?[cpp]
void __fastcall TForm2::BitBtn2Click(TObject Sender)
{
TStringList List = new TStringList();
List->Add("Test");
List->Add("Test,2");
List->Add("Test,3");
ComboBox1->Items->Text = List->Text;
delete List;
}
//---------------------------------------------------------------------------void __fastcall TForm2::BitBtn3Click(TObject Sender)
{
TStringList List = new TStringList();
List->Add("Test");
List->Add("Test,2");
List->Add("Test,3");
ComboBox2->Items->CommaText = List->CommaText;
delete List;
}
//---------------------------------------------------------------------------
[/cpp]
... keiner, denn das Ergebnis ist gleich.Und tu mir einen Gefallen, bevor Du wieder sagst, daß es nicht das Gleiche ist, probier es aus.
Bis dann denn,

Nash
-
So langsam ist es echt unfassbar ....

TStringList* List = new TStringList(); List->Add("Test"); List->Add("Test2"); List->Add("Test3\r"); ComboBox1->Items->Text = List->Text; delete List; List = new TStringList(); List->Add("Test"); List->Add("Test2"); List->Add("Test3\r"); ComboBox2->Items->CommaText = List->CommaText; delete List;Verstehst du den Unterschied ? Wenn nicht, nimm endlich mal die Hilfe ...

-
Hallo,
So langsam ist es echt unfassbar ....
Das dachte ich auch gerade.
Natürlich gibt es einen Unterschied zwischen "Text" und "CommaText". Wenn ich mir ein Beispiel bastel, dann sieht man ihn auch. Aber wir entfernen uns vom Thema. Außerdem weiss ich nicht, warum Du hier ausfallend wirst. Wenn man nicht das macht was Du willst, fippst Du aus... machst Du das immer so ?Um zum Thema zurückzukommen :
Man kann, wenn man die Aufgabenstellung berücksichtigt (und die ist ganz einfach), "Text" oder "CommaText" nehmen. Das macht keinen Unterschied (jedenfalls nicht in diesem Beispiel, wo ich Werte, die aus einem Textfeld kommen, hinzufügen will). So, nun kann der Themenstarter das machen oder auch nicht, daß bleibt ihm überlassen. Ich klinke mich aus diesem Thread aus, den ich habe keinen Bock mich mit irgendwem hier rumzustreiten, nur weil der anderer Meinung ist und keine andere gelten lassen will.P.S.:
Bei Deinem Beispiel ist "CommaText" irgendwie nicht geeignet, denn es wird kein Zeilenumbruch hinzugefügt, sondern ein Sonderzeichen (senkrechter dicker Strich). Nicht sehr schlau...
Bis dann denn,

Nash
-
Außerdem weiss ich nicht, warum Du hier ausfallend wirst. Wenn man nicht das macht was Du willst, fippst Du aus... machst Du das immer so ?
*Lol*
Mach mich doch nicht dafür verantwortlich, wenn dich die Wahrheit zu hart trifft.
Du hast den Unterschied aber halt immer noch nicht begriffen.
Du stellst hier Behauptungen auf.Und tu mir einen Gefallen, bevor Du wieder sagst, daß es nicht das Gleiche ist, probier es aus.
Soll heißen ... CommaText == Text
und im nächsten Atemzug gibst du sowas von dirNatürlich gibt es einen Unterschied zwischen "Text" und "CommaText".
Du kannst jede Menge unterschiedlichen Code erzeugen, der anscheinend das gleiche macht. In bestimmten Fällen, das kann halt auch nur ein "\r" sein erzeugen diese unterschiedlichen Codes aber eben ganz erheblich unterschiedliche Ergebnisse.
Bei Deinem Beispiel ist "CommaText" irgendwie nicht geeignet, denn es wird kein Zeilenumbruch hinzugefügt, sondern ein Sonderzeichen (senkrechter dicker Strich).
Krach.
Das war nun meine Tischplatte.Tschüss Troll.