Grundsätzliche Frage zur Verwaltung von eingelesenen Strings
-
Ich würde gern mal wissen, wie man mit mfc normalerweise seine Strings
verwaltet, die man aus einer Datei eingelesen hat.Beispiel: :kundenid:"vorname":"nachname":"email":Wenn ich mal auf php zurückblicke, dann habe ich einfach die Datei Zeile
für Zeile eingelesen und dann jede Spalte der Zeile in ein mehrdimensionales
Array ($ReadString[100][10]) gespeichert.Ok, bis dahin mache ich das mit c++ genauso, nur wie macht ihr es,
als erfahrene c++ Programmierer? Ich frage deshalb, weil ich eine
Funktion habe, die nach einem open dialog die Datei einliest und
in einem CString (ReadString[100][10]) speichert. Nur wie kann ich
jetzt mit den Daten arbeiten, denn aus einer Funktion kann man
anscheinend mit return keine mehrdimensionalen CStrings zurückgeben.Oder gibt es einen ganz anderen Weg, als ein mehrdimensionales Array?
Bei einem CListCtrl kann ich die eingelesenen Daten ja direkt an das
Objekt schicken, aber in diesem Fall möchte ich Sie auf Userwunsch
nacheinander in einem Editfeld anzeigen, also muss ich die Daten ja
irgendwo zwischenspeichern.Danke Euch
-
Leg eine Membervar von CStringArray an und dann geht das
-
Danke dir, das schaut schon mal besser aus aber ein CStringArray ist
doch auch nur eindimensional oder? Dann müsste ich für jede Spalte eine
extra Variable anlegen. Also würde das so aussehen:Array m_KundenId ( [0] => kundenid1 [1] => kundenid2 [2] => kundenid3 ) Array m_KundenVorname ( [0] => vorname1 [1] => vorname2 [2] => vorname3 )Was ich bräuchte wäre aber in dieser Art:
Array m_KundenDaten ( [0] => Array ( [0] => kundenid1 [1] => kundenid2 [2] => kundenid3 ) [1] => Array ( [0] => vorname1 [1] => vorname2 [2] => vorname3 ) )In der MSDN finde ich einfach auch nichts darüber. Meine erste
gepostete Version mit CString m_KundenDaten[200][10] funktioniert
ja wunderbar nur leider kann ich die nicht als Membervariable anlegen,
da ich die Größe vorher nicht kenne.Ein Teufelskreis...
-
Mir ist grad eingefallen, das ich das Problem vielleicht mit struct lösen
könnte oder hat das nen Nachteil?typedef struct KundenDaten_ { int KuId; CString KuVorname; CString KuNachname; CString KuEmail; } KundenDaten; KundenDaten myKD[200]; myKD[0].KuId = 1000; myKD[0].KuVorname = "vorname1"; etc.
-
Du hast gesagt das du nicht weisst wieviele Datensätze du hast,da würde ich die Kundendaten in ein CArray packen.
-
Ok danke, CArray ist dann die Template Klasse von CStringArray aber ich
werd aus der MSDN nicht schlau. Ist auch ne super Erklärung was MS da liefert.++++++ snip ++++++
// declares an array of points
CArray<CPoint,CPoint> ptArray;
++++++ snip ++++++Wenn ich jetzt ein Array wie folgt haben möchte:
Array m_KundenId ( [0] => kundenid1 [1] => kundenid2 [2] => kundenid3 )Dann würde ich sagen, das ich wie folgt vorgehen muss:
CString SetKID1("kundenid1"); CString SetKID2("kundenid2"); CString SetKID3("kundenid3"); CArray <int,CString> m_KundenId; m_KundenId.SetSize(3); m_KundenId.RemoveAll(); m_KundenId[0] = SetKID1; m_KundenId[1] = SetKID2; m_KundenId[2] = SetKID3;...was aber nichteinmal annähernd funktioniert.
-
Servus,
ne was Andorxor meinte ist das hier:
typedef struct ZiehDerKatze { int iLaenge; int iBreite; int iKatze; } STR_ZIEHDERKATZE; CArray <ZiehDerKatze, ZiehDerKatze &> myKatze;Dann kannst du nämlich:
STR_ZIEHDERKATZE strZieh; strZieh.iLaenge = 100; myKatze.Add(strZieh);Rausholen
EDIT:int iTest = myKatze[0].iLaenge;@ Andorxor: Das meinteste du doch oder?
*winke*
Hellsgore
-
Oh man, hab ich wieder mal den Wald vor lauter Bäumen nicht gesehen.
Danke jetzt hab ichs. Könnt Ihr mir vielleicht nocht sagen, warum
ich bei einem CArray zwischen den Klammern alles doppelt angeben muss?
Das versteh ich noch nicht ganz....CArray <KundenDaten, KundenDaten> m_KundenDaten;