Benutzer mit den meisten Antworten
Membervariablen und deren Werte aus Textdatei übernehmen

Frage
-
Hallo,
ich habe eine Textdatei, in der mehrere Membervariablen und deren Werte enthalten sind. Das Format der Textdatei kann ich nicht ändern. Die Membervariablen sind bekannt und in meiner Klasse als double bereits vorhanden. Nach dem Auslesen sollen die Werte den Membervariablen zugwiesen werden. Daran scheitere ich im Moment.
Beispiel zu Erklärung:
In der Textedatei steht:
m_dTest,100.0000
Im Programm bin ich soweit, dass ich Folgendes daraus habe:
CString strVariable = "m_dTest";
double dWert = 100.0;
Im Programm soll im nächsten Schritt Folgendes stehen:
m_dTest = dWert;
Wie kann ich das erreichen?
Danke im Voraus und viele Grüße
Bernd
Antworten
-
Lies eine textzeile, Parse den Text und splate ihn in Namen und Wert.
Dann wirst Du nicht drum herum kommen einen großen if/switch Block zu bauen in dem Du die passende Membervariable vergleichst und die Zuordnung durchführst.
Man kann nicht die "internen symbolischen" Werte "externen Symbolen" so zuordnen.
Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de
- Als Antwort vorgeschlagen Ionut DumaModerator Donnerstag, 14. März 2013 09:14
- Als Antwort markiert Bernd Föry Freitag, 15. März 2013 07:36
Alle Antworten
-
Lies eine textzeile, Parse den Text und splate ihn in Namen und Wert.
Dann wirst Du nicht drum herum kommen einen großen if/switch Block zu bauen in dem Du die passende Membervariable vergleichst und die Zuordnung durchführst.
Man kann nicht die "internen symbolischen" Werte "externen Symbolen" so zuordnen.
Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de
- Als Antwort vorgeschlagen Ionut DumaModerator Donnerstag, 14. März 2013 09:14
- Als Antwort markiert Bernd Föry Freitag, 15. März 2013 07:36
-
Hallo Bernd,
Eine Lösungsmöglichkeit wäre die map Klasse zu verwenden. Unter [1] können Sie die Dokumentation dafür finden. Ein Codebeispiel wie dieses realisiert werden kann, können Sie sich unten anschauen:
#include <map> #include <string> using namespace std; int main() { map<string, double> wert; //key type is string, mapped value is double string strVariable = "m_dTest"; double dWert = 100.0; wert[strVariable] = dWert; }
Wenn dieses als Lösung nicht geeignet ist, können Sie sich unter [2] eine weitere Alternative anschauen. Diese betrifft das Verwenden eines Associativen Arrays.
[1] http://www.cplusplus.com/reference/map/map/
[2] http://www.codeproject.com/Articles/149879/Associative-Array-in-C
Wir hoffen, vielen Besuchern der MSDN Foren durch das Posten dieses Problems und einer möglichen Lösung weiterhelfen zu können.
Viele Grüße,
Bo Liu
App-Entwickler-Hotline für MSDN Online Deutschland
Disclaimer:
Bitte haben Sie Verständnis dafür, dass wir hier auf Rückfragen gar nicht oder nur sehr zeitverzögert antworten können.
Bitte nutzen Sie für Rückfragen oder neue Fragen den telefonischen Weg über die App-Entwickler-Hotline: http://www.msdn-online.de/Hotline
Es gelten für die App-Entwickler-Hotline und dieses Posting diese Nutzungsbedingungen, Hinweise zu MarkenzeichenInformationen zur Datensicherheit sowie die gesonderten Nutzungsbedingungen für die App-Entwickler-Hotline.- Bearbeitet Hristo Valev Mittwoch, 6. März 2013 11:15
-
Hallo Martin, hallo Bo Liu,
danke für Eure Antworten.
Ich habe den obigen Programmcode in meine MFC-SDI-Anwendung (VS 6.0, ja leider immer noch)übernommen. Beim Erstellen der Debug-Exe bekomme ich folgende Warnungen:
c:\program files\microsoft visual studio\vc98\include\xtree(118) : warning C4786: 'std::_Tree<std::basic_string<char,std::char_traits<char>, usw.
Trotzdem kann ich zum Haltepunkt der Programmstelle springen. Beim Ausführen des Programmcodes wird aber meine double-Membvariablen nicht mit dem neuen Wert aktualisert, d.h. deren alter Wert bleibt erhalten. Wenn ich den obigen Programmcode richtig verstehe, wird der neue Wert auch gar nicht meiner double-Membvariablen zugewiesen, sondern nur mit deren Namen in die map eingetragen.
Mache ich noch etwas falsch oder kann ich mit dem obigen Programmcode meine double-Membvariable gar nicht aktualisieren?
Viele Grüße
Bernd
-
Hallo Bernd, mit der Lösung von Bo Liu stehen die Werte dann in dem Map. Der Variablenname ist der Schlüssel. Die Member werden dann nicht mehr benötigt. Wenn man sich dann entsprechende Getter anlegt, kann man bequem auf die Werte zugreifen. Holger
-
Hallo Holger,
danke für Deine Antwort.
> mit der Lösung von Bo Liu stehen die Werte dann in dem Map. Der Variablenname ist der Schlüssel.
Dann habe ich die Verwendung von map also richtig verstanden.
> Die Member werden dann nicht mehr benötigt.
Die Membervariablen werden eben doch im weiteren Programmverlauf benötigt und zwar mit den aktualisierten Werten aus der Textdatei. Ich befürchte, dass Martin mit seiner Antwort doch richtig liegt.
Viele Grüße
Bernd