Vector: Problem beim auslesen
-
Hallo,
irgendwie hab ich ein Verständnisproblem mit Vectoren.
Also ich habe eine Struktur angelegt
// in .h struct TagesProg { // int TagesProgID; CStringArray m_strEvent; CStringArray m_strTime; CStringArray m_strSender; CStringArray m_strChannel; CStringArray m_strOnAir; };Dann habe ich einen Vector draufgelegt.
// in .cpp #include <vector> #include <algorithm> vector<TagesProg *> myVectorTagesprog;Dieser Vector wird in einer Funktion gefüllt.
while(j < strAEvent.GetSize()) { TagesProg *pTProg = new TagesProg; myVectorTagesprog.push_back(pTProg); while( -1 != (pos = strAEvent[j].Find(';',pos))) { switch (n_Trenner) { case 0: pTProg->m_strTime.Add(strAEvent[j].Mid(old, pos - old)); break; case 1: pTProg->m_strEvent.Add(strAEvent[j].Mid(old, pos - old)); break; case 2: pTProg->m_strSender.Add(strAEvent[j].Mid(old, pos - old)); break; case 3: pTProg->m_strChannel.Add(strAEvent[j].Mid(old, pos - old)); break; case 4: pTProg->m_strOnAir.Add(strAEvent[j].Mid(old, pos - old)); break; } old = ++pos; n_Trenner++; } j++; old = 0; pos = 0; n_Trenner = 0; }Jetzt möchte ich den Vector auslesen und in einem CListCtrl packen.
Mit nem normalen CStringArray habe ich das auch schon geschaft, aber irgendwie klappt das mit dem Vector nicht. pTProg erkennt er irgendwie nicht. Wohl weil pTProg erst in der while-Schleife lokal deklariert wird, aber global läßt der sich nicht anlegen.
Wie kann ich die Daten des Vectors wieder auslesen
-
1. ich seh kein push_back in deinem code oben, wo genau füllst du denn den vector??
2.Mit nem normalen CStringArray habe ich das auch schon geschaft, aber irgendwie klappt das mit dem Vector nicht. pTProg erkennt er irgendwie nicht.

zeig mal wie du aus dem vector liest
-
CMatt schrieb:
1. ich seh kein push_back in deinem code oben, wo genau füllst du denn den vector??
2.Mit nem normalen CStringArray habe ich das auch schon geschaft, aber irgendwie klappt das mit dem Vector nicht. pTProg erkennt er irgendwie nicht.

zeig mal wie du aus dem vector liestZu 1:
Sorry, hab ich vergessen. Hatte die Funktion mal geschrieben, aber dann wieder gelöscht und es mit CStringArray´s versucht. Ich komm aber anscheinend nicht um Vector herum. Die push_back habe ich jetzt im ersten Posting eingefügt.Zu 2:
Im Augenblick lese ich den Vector noch gar nicht aus. Das ist ja mein Problem. Ich hatte es bisher mit CStringArray´s gemacht.int nItem; int nAnzahlEintraege = j; if( nAnzahlEintraege > 11) m_lcProgramm.SetWindowPos(NULL, 10, 50, 522, 200, SWP_NOZORDER); for(int i = 0; i < nAnzahlEintraege; i++) { nItem = m_lcProgramm.GetItemCount(); nItem = m_lcProgramm.InsertItem(nItem, &m_strTime.ElementAt(i),-1); m_lcProgramm.SetItem(nItem,0, (DWORD) &m_strTime[0],NULL,0,0,0,NULL); m_lcProgramm.SetItemText(nItem, 1, m_strEvent.ElementAt(i)); m_lcProgramm.SetItem(nItem,0, (DWORD) &m_strEvent[0],NULL,0,0,0,NULL); m_lcProgramm.SetItemText(nItem, 2, m_strSender.ElementAt(i)); m_lcProgramm.SetItem(nItem,0, (DWORD) &m_strSender[0],NULL,0,0,0,NULL); m_lcProgramm.SetItemText(nItem, 3, m_strStart.ElementAt(i)); m_lcProgramm.SetItem(nItem, (DWORD) &m_strStart[0],NULL,0,0,0,NULL); }
-
***mach aktuell***
Wie kann ich denn jetzt ein Vector auslesen?

-
// zugriff aufs erste element im vector myVectorTagesprog[0]->m_strEvent; myVectorTagesprog[0]->m_strTime; // zugriff aufs zweite .. myVectorTagesprog[1]->m_strEvent; myVectorTagesprog[1]->m_strTime; ...versteht leider immer noch net wo es eigentlich hängt

-
Hi CMatt,
mein Hauptproblem ist, das ich im Moment eigentlich noch nicht genau weiß, wie ich mein Softwareproblem angehen soll. Mal ne kurze Erklärung dazu.
Ich bekomme von einer Website x-Datensätze.
D.h.
x mal m_strTime, m_strEvent, m_strSender, m_strChannel und m_strOnAir.Hiermit muß ich eine CListCtrl füllen und dieses muß anschließend sortiert werden.
Nach dem es sortiert wurde muß ich aber noch irgendwie die richtigen Datensätze ansprechen können. Also z.B.
Ich bekomme von der Webseite Daten, die so angezeigt werden müssen.
Uhrzeit____Event________Streamer_________Channel____OnAir
20:15______Skat_________Michael__________30_________Ja
20:15______Skat_________Frank____________33_________Ja
20:15______Skat_________Andreas__________35_________Nein
21:15______Doppelkopf____Sepp_____________42_________Nein
21:15______Doppelkopf____Jupp_____________45_________Nein
21:15______Doppelkopf____Michaela_________65_________Nein
21:15______Doppelkopf____Ellen____________543________Nein
21:15______Skat_________Jack_____________47_________Nein
21:15______Skat_________Fritz____________87_________NeinWenn der User jetzt die Spalte
20:15_________Skat_________Frank_________33_________Ja
anklickt, müssen die Daten für das Event 20:15 Skat an das Hauptfenster übergeben werden. Dann soll im Hauptfenster ein Editfeld das Wort Skat kriegen
und in einer ComboBox die Auswahl zwischen Michael, Frank und Andreas (wobei Frank in der Liste ganz oben ist.Ich hatte das ganze erst mit CStringArray versucht (siehe oben), kriege das aber nicht so hin wie ich will.
Wie sollte ich dabei jetzt vorgehen?

Sollte ich in der Struktur mit CStringArray arbeiten und nur einen Vector drauflegen, oder mit CStringArray arbeiten und für jedes Event ein neues Vectorelement anlegen, oder nur CString und kein CStringArray in der Struktur haben.
Und wenn ich mit Vector arbeite, wie setze ich dann das SetItem, damit das CListCtrl anschließend sortiert werden kann?Fragen über Fragen
-
mein Hauptproblem ist, das ich im Moment eigentlich noch nicht genau weiß, wie ich mein Softwareproblem angehen soll.
Einen groben Plan sollte man schon vorher haben... IMHO
Ich bekomme von einer Website x-Datensätze.
D.h.
x mal m_strTime, m_strEvent, m_strSender, m_strChannel und m_strOnAir.Na prima, dann legst Du 5 Vektoren an und machst per empfagenen Datensatz
5x pushback (je vektor 1x :-))Hiermit muß ich eine CListCtrl füllen und dieses muß anschließend sortiert werden.
Das ListCtrl kannst Du aus den vektoren füttern.
Nach dem es sortiert wurde muß ich aber noch irgendwie die richtigen Datensätze ansprechen können. Also z.B.
Hint: über "Index" zugreifen.
Wenn der User jetzt die Spalte
20:15_________Skat_________Frank_________33_________Ja
anklickt, müssen die Daten für das Event 20:15 Skat an das Hauptfenster übergeben werden. Dann soll im Hauptfenster ein Editfeld das Wort Skat kriegen
und in einer ComboBox die Auswahl zwischen Michael, Frank und Andreas (wobei Frank in der Liste ganz oben ist.Wie gesagt, Du ermittelst _einen_ entsprechenden Index und kannst
dann alle beleibigen Daten dieses Datensatzes weiterverarbeiten.
-
MSDN_Hasser schrieb:
mein Hauptproblem ist, das ich im Moment eigentlich noch nicht genau weiß, wie ich mein Softwareproblem angehen soll.
Einen groben Plan sollte man schon vorher haben... IMHO
Nen groben Plan hab ich schon. Oben steht ja beschrieben, wie das Ergebnis aussehen soll. Der Weg ist nur noch nicht ganz klar.
MSDN_Hasser schrieb:
Ich bekomme von einer Website x-Datensätze.
D.h.
x mal m_strTime, m_strEvent, m_strSender, m_strChannel und m_strOnAir.Na prima, dann legst Du 5 Vektoren an und machst per empfagenen Datensatz
5x pushback (je vektor 1x :-))Wie meinst Du das?
**
5 Vectoren =
1 Vector CString m_strTime,
1 Vector CString m_strEvent,
1 Vector CString m_strSender,
1 Vector CString m_strChannel und
1 Vector CString m_strOnAir
???
**
Wie soll ich denn da rauskriegen, welcher Eintrag zu welchen Event gehört?
Und wie müsste ich SetItem setzten, damit die Ausgabe sortiert wird?
-
Wie meinst Du das?
5 Vectoren =
1 Vector CString m_strTime,
1 Vector CString m_strEvent,
1 Vector CString m_strSender,
1 Vector CString m_strChannel und
1 Vector CString m_strOnAir
???Ja, genau so. Diese dienen als Container, die das Abbild der Daten
von Deiner Website enthalten.Wie soll ich denn da rauskriegen, welcher Eintrag zu welchen Event gehört?
Wenn du jeden Datensatz nach und nach abspeicherst, müssen diese Daten
konsistent bleiben. Egal von welchem vektor Du [5] ausgibst - es gehört
dann immer zum 5. Datensatz.
Klar, daß in diesen Vektoren nichts sortiert oder umhergeschoben werden darf,
sonst ists vorbei mit der konsistenten Zuordnung.Und wie müsste ich SetItem setzten, damit die Ausgabe sortiert wird?
Du nimmst den Vektor, der die Daten enthält, nach denen gesucht werden
muß. Dann ermittelst Du die Reihenfolge (nicht den vektor verändern!) wie die Daten sortiert werden sollen, also die Indizes, und füllst dann anhand dieser die Lisbox.