(ini)alle Werte ohne den Key aus einer Section in memo ausgeben
-
Dann gehört wohl noch ein Zwischenschritt hin? Was erwartet ReadSectionValues denn als Parameter?
-junix
-
(const AnsiString Section, Classes::TStrings* Strings);
Der Parameter Strings kann auf ein TStrings-Objekt zeigen oder auf eine Komponenteneigenschaft, wie z.B. Items für eine TListBox-Komponente, die selbst ein TStrings-Objekt darstellt.
da werd ich nur so draus schlau das ReadSectionValues halt die Section erwartet und wo er sie ausgeben kann und das kann ein TStrings-Objekt sein.
-
Na also.. und statt das hald direkt in das Memo rauszubröseln kannst du das Ergebnis ja erst zwischenspeichern und passend nach deinen wünschen filtern, indem du hald statt der Eigenschaft Lines einfach deine eigne Instanz eines TStrings-Objekts übergibst?
-junix
-
danke guter tip:
ini->ReadSectionValues("Name",sList2);
und nu ?
ini->ReadSectionValues("Name",sList2); int i = sList2->???????; Memo1->Lines->Add(i);
...ich find keiner von dem Methoden die mir helfen könnte
hab mir alle durch gelesen
-
Eigenschaften wie Keys und Values sind dir auch noch nicht aufgefallen?
-junix
-
jab jetzt hab ich mich da acuh durch gelesen leider bittet der BCB kein beispiel. nur :
_property AnsiString Values[AnsiString Name] = {read=GetValue, write=SetValue};
woraus ich irgendwie ned schlau werde
-
unter ReadSectionValues ist auch ein Beispiel zu der Eigenschaft Values von TString...
natürlich könntest du auch mit Hilfe der AnsiString-Funktionen jede Zeile der Stringlist nach dem "=" absuchen und den darauffolgenden Teil in irgendeiner Form in einer Liste darstellen, z.b. über SubString, Pos und ähnliches
[Edit] schau dir auch mal die Verwendung von TStringList an
-
Hab ich alles, und alles taugt nix fuck nur zum aufregen
mit ini->ReadSectionValues("Name",ListBox1->Items); bekomme ich die ganze Section ausgegeben ich will aber nur alle "Values" haben und den den scheiss key und das = zeichen !!
-
Statt dich verbal in die Gosse zu begeben würdest du dich besser mal um das kümmern was man dir gesagt hat?
Folgende Eigenschaften und Methoden, vereint in einer kleinen Funktion führen zur Lösung:
TMemo::Lines::Add
TStringList::Names
TStringList::ValuesWenn du etwas nicht schnallst wies beschrieben ist, frag nach. Aber frag gezielt nach und nicht "woraus ich irgendwie ned schlau werde ".
_property AnsiString Values[AnsiString Name] = {read=GetValue, write=SetValue};
Diese Zeile ist die Deklaration des Property "Values". Was verstehst du daran nicht? Welches sind die unbekannten in dieser Deklaration? Kannste vielleicht irgend was näheres in der Borland-Hilfe dazu erfahren? Gibt es da vielleicht nicht auch was dazu in der FAQ
? Was bringt eine Suche nach TStringList und Values im VCL Forum - oder gar in den Usenet-Groups? Hast du vielleicht eine Theorie wie man das Teil da verwenden könnte? Hast du die Theorie schon getestet? Wie sieht die Theorie aus? Wieso hast du die Theorie noch nicht getestet? ...
Fragen über Fragen die du dir stellen solltest... aber was schreib ich hier überhaupt. Meinen Hinweisen folgst du ja eh ned. Wäre hald mit Arbeit verbunden...
-junix
EDIT: Ausserdem hat Linnea auch bereits alternativvorschläge gemacht mit denen man arbeiten könnte, statt hier rumzufluchen. Wieso bist du diesen Vorschlägen nicht nachgegangen?
-
Nur mal als Frage junix. Seit wann hat TStringList eine Eigenschaft namens Keys? Ist das mit BCB6 eingeführt worden? Bei mir (BCB5) heisst die äquivalente Eigenschaft Names.
-
Stimmt... Names wäre der korrekte Eigenschaft... hab keine VCL-Hilfe in der Nähe und alels ausm Kopf zusammenzudröseln is etwas schwierig (o;
-
junix schrieb:
Fragen über Fragen die du dir stellen solltest... aber was schreib ich hier überhaupt....
Aber Sokrates währe stolz auf Dich gewesen.
-
void __fastcall TForm1::BitBtn1Click(TObject *Sender) { ListBox1->Clear(); ini->ReadSection("Name",ListName); ini->ReadSection("Vorname",ListVorname); ini->ReadSection("Nummer",ListNummer); int i = 0; while ((i < ListName->Count) && (i < ListVorname->Count)) { AnsiString asName,asVorname,asNummer; asName = ini->ReadString("Name",IntToStr(i+1),""); asVorname = ini->ReadString("Vorname",IntToStr(i+1),""); asNummer = ini->ReadString("Nummer", IntToStr(i+1),""); if ((ListName->Strings[i]) == (ListVorname->Strings[i])) { ListBox1->Items->Strings[i] = AnsiString(asName) + " " + asVorname + " "+asNummer; } i++; } }
vieleicht nicht schön aber es rennt sauber.
-
|23| schrieb:
vieleicht nicht schön aber es rennt sauber.
Und wenn da zwischen drinn ein Record fehlt? also Sektion 1, 2, 4 und 5 existieren?
-junix
-
dieses kann ja nicht passieren da alle eingeben so gemacht werden das er automatisch immer im Key 1,2,3,4 usw. einträg und immer von der letzten Position anfängt, sprich ich bin beim Eintrag 23 und wenn ich einen weitern Eintrag mache mach lautet der Schlüssel 24.
aber dieses ist jetz nicht so schlim den jetzt will ich für das ganze ne suchfunktion schreiben. und diese soll nicht so simpel sein wie meien nadere:
for (int i=0; i<=AusgabeMemo1->Lines->Count; i++) if (AusgabeMemo1->Lines->Strings[i].Pos(SucheEdit1->Text)) Memo1->Lines->Add(AusgabeMemo1->Lines->Strings[i]);
es soll so gesucht werden das ich einen in ein Edit feld z.b das wort i eingebe und er mir alle eintrage zeigt die mit i anfangen und geb ich nahc dem i da g ein z.b ig soll er das automatisch erkennen und alle ergebnise mir ig ausgeben usw...
mfg
|23|
-
Da dein Ansatz zwar funktioniert aber auf lange sicht in den Abgrund führt, empfehle ich mal folgendes Stück Code zu testen:
TStringList *list_TSLp = new TStringList(); list_TSLp->Text = "Key1=Val1\r\nKey2=Val2\r\nKey3=Val3\r\n"; ShowMessage(list_TSLp->Values["Key2"]); delete list_TSLp;
-junix
-
junix schrieb:
Da dein Ansatz zwar funktioniert aber auf lange sicht in den Abgrund führt [...]
Ähm... sieh dir das nochmal an und sag mir nochmal, dass es funktioniert:
for (int i=0; i<=AusgabeMemo1->Lines->Count; i++) //...//
Ich sage nur: List index out of bounds...
-
Kind. ich habe nur wiederholt, was 23 sagte... seine Aussage war, achtung lesen: "vieleicht nicht schön aber es rennt sauber." Den anderen Code hab ich gar nicht mehr angeschaut, da der - methodisch korrektere - Ansatz auf den ich ihn jetzt heben wollte diese Problematik ohnehin übergeht.
Also hör auf rumzumaulen und geh dich lieber wieder schämen...
-junix
-
Pass lieber auf deinen Ton auf, junix. Seie Aussage, dass es sauber rennt, glaube ich ehernicht, och bezweifle, dass er es jemals getestet hat. Ist auch egal, ich wollte damit nur sagen, dass es eben nicht funktioniert. Warum es nicht funktioniert sei mal dahingestellt.
-
Windoof schrieb:
Pass lieber auf deinen Ton auf, junix.
Wieso?
Und ob seine Aussage richtig ist oder nicht, ist an diesem Punkt völlig irelevant.
EDIT: Achja, es gilt auch hier: weitere OT Beiträge werden kommentarlos gelöscht.
EDIT2:
junix schrieb:
Hör mal auf mit deinem kindischen genöle und mach die Augen auf. Und selbst wennich hier was gelöscht hätte [...], dann habe ich die Kompetenz und den Ermessensfreiraum dazu vom Admin erhalten. Wenn dir was an meiner Lösch-/Verschiebe-/Trennstrategie nicht passt, beschwer dich in einem Extrathread im Themen rund um Offtopic oder <a target='_blank' href='viewforum.php?f=12'>Neuigkeiten aus der realen Welt Forum</a> oder per direktem Mail an Marcus. Das hatte ich dir schon oft genug erklärt. UNd langsam frageich mich wieso ichs immer wieder tue...
-junix