Bin gerade am C++ lernen und daher noch ziemlich Anfänger.
Ich lese mit Hilfe von CStudioFile ein .txt File Zeilenweise aus und möchte jede Zeile anschliessend aus einer anderen Klasse (z.B. in einer Tabelle) darstellen lassen.
Eine Zeile besteht aus Tracknummer, Trackname, Interpret und TrackDauer --> 01 / Radio / Robbie Williams / 3:42
Die Zeilen kann ich ohne Probleme lesen (jede Zeile wird als String zurückgeben) und kann sie dann auch in einem TRACE ausgeben.
Nun zu meinem Problem: Ich möchte mit einer Funktion wie ’getCDInfo(zeilen)’ aus meiner Klasse CreadFile die gewünschten CD Informationen holen. Ich weiss aber leider nicht, wie ich das anstellen kann. :-(
Ich muss doch die gelesenen Zeilen wieder temporär speichern und dann der Klasse zurückgeben, die dann die Informationen darstellen soll. Als was speichere ich die String-Zeilen ab und wie gibt man sie dann zurück? Ist Pointer auch ein Thema?
Hallo, falls Du mit String CString meinst, kannst Du CStringArray als Speicher nehmen. Die gelesenen Zeilen fügst Du mit der Add Methode hinzu und lesen kannst Du wie in einem normalen Array mit [].
Naja ich kenne Deinen Programmaufbau nicht. Falls die Klasse (d.h. deren Instanz), die die Daten liest noch weiter besteht, kannst Du Ihr z.B. eine Funktion (public)
C++:
CString GetLine(int nr) const { if ((nr >= 0) && (nr < myCDArray.GetSize()) return myCDArray[nr]; else return""; // oder irgend eine Fehlerbehandlung }
spendieren. Ansonsten ist es evtl. günstiger das Array in der Klasse zu haben, die die Daten benutzt und in der Lese-Klasse dann etwas in der Art
Ich habe eine Klasse cdFile welche die Funktion ’getCDInfo()’ der Klasse cdFileReader aufrufen soll. Danach soll die Funktion mir das Array urückgeben.
Klasse ccdFile:
C++:
CStringArray myArray; // ist das richtig? myCcdFileReader->getCDInfo(wert, myArray); // ist das richtig?
// Und anschliesend kann ich das Array 'myArray' gebrauchen?
Klasse cdFileReader
C++:
BOOL CcdFileReader::getCDInfo(int wer, CStringArray& myCDArray) // ist das richtig? { bool status = true; CString szCDLine; CStringArray myCDArray; ... while(status) { status = readFile(szCDLine); myCDArray.Add(szCDLine); ... } }
Verstehe ich das richtig? Übergebe ich so nur die Referenz auf das CStringArray? Ich meine bei einer solchen Übergabe benötige ich nicht den Speicherplatz für zwei Arrays?
Genau so meinte ich das. Es gibt dann nur ein Array, nämlich myArray in ccdFile und myCDArray ist "nur" eine Referenz darauf. Eine Übergabe per Copy ist in den CArray-Klassen gar nicht vorgesehen.