Komplizierte Frage zu CStdioFile
-
danke für den CStdioFile-Code
hab aber auch hie gesucht aber das hab ich nicht gefunden^^
ok werde ich mal machen wenn ich wieder hilfe brauche melde ich mich
-
jetzt steh ich doch wieder mal auf der leitung
edit: ist das richtig so?
void CSettingsDlg::OnCbnSelchangeActuator() { switch(m_sActuator.GetCurSel()) { case 0: { CStdioFile WurstFile; // So viel Spass muss sein if (WurstFile.Open("datei.txt", CFile::modeRead)) { CString Zeile; while (WurstFile.ReadString(Zeile)) { m_sRActuator += Zeile; } UpdateData(false); WurstFile.Close(); } else MessageBox("Scheiss Datei kann nich geöffnet werden!", "Fehler", 0); } break; case 1: { CStdioFile WurstFile; // So viel Spass muss sein if (WurstFile.Open("datei1.txt", CFile::modeRead)) { CString Zeile; while (WurstFile.ReadString(Zeile)) { m_sRActuator += Zeile; } UpdateData(false); WurstFile.Close(); } else MessageBox("Scheiss Datei kann nich geöffnet werden!", "Fehler", 0); } break; } }
Hab die Variable "m_sRActuator" als "CString" deklariert, ist das richtig?
-
Hallo
Hast du schon mal was von Coderedundanz gehört. Man sollte den Code nicht für jeden Case Fall implementieren. Die Nachteile muss ich dir glaub ich nicht erklären, oder etwa doch.
CString ist richtig. Sagen wir mal fürs erste. Somit hast du ja nun die ganze Datei in einem String. Wie gesagt um nach bestimmten Werten zu suchen musst du das ganze in einer map speichern.
-
Habe seit über einem Jahr nichts mehr in C++ gemacht und nun soll ich das machen, natürlich weiß ich nicht was "Coderedundanz" ist
wie soll ich es dann machen?
brauche doch den code für 2 verschiedene dateien also einmal zum öffnen von datei.txt und einmal für datei1.txt
-
Habe seit über einem Jahr nichts mehr in C++ gemacht und nun soll ich das machen, natürlich weiß ich nicht was "Coderedundanz" ist
Na du bist lustig. Das hat nicht nur was mit c++ zu tun sondern allgemein mit der Programmierung. Ein paar Grundlagen sollte man aber schon kennen bevor man sich direkt an ein "schwierigeres" Projekt begibt.
wie soll ich es dann machen?
Wie wärs mit einer Funktion:
void CSettingsDlg::OnCbnSelchangeActuator() { switch(m_sActuator.GetCurSel()) { case 0: m_sRActuator = OpenFile("datei.txt"); break; case 1: m_sRActuator = OpenFile("datei1.txt"); break; } } CString CSettingsDlg::OpenFile(const CString &file) { CString sRActuator; CStdioFile WurstFile; // So viel Spass muss sein if (WurstFile.Open(file, CFile::modeRead)) { CString Zeile; while (WurstFile.ReadString(Zeile)) { sRActuator+= Zeile; } UpdateData(false); WurstFile.Close(); } else MessageBox("Scheiss Datei kann nich geöffnet werden!", "Fehler", 0); return sRActuator; }
Nur mal so als Schnellschuss wobei man hier noch einiges verbessern sollte.
-
sasse schrieb:
Na du bist lustig. Das hat nicht nur was mit c++ zu tun sondern allgemein mit der Programmierung. Ein paar Grundlagen sollte man aber schon kennen bevor man sich direkt an ein "schwierigeres" Projekt begibt.
Sagt das meinem Chef
der sagt "learning by doing" und "das findet man doch alles im inet oder in irgendeinem buch ist es beschrieben" -.-
wunderbar aber hauptsache ich soll den scheiß machen
naja egal. danke für deine hilfe aber ich komm damit nicht klar - die funktionen verstehe ich zwar aber ich weiß nicht wie ich sie einsetzen soll.
des weiteren habe ich bis jetzt immer den switch-befehl zusammen mit dem enum-befehl benutzt und das kann ich hier nicht.
ich brauche das aber, weil ich das in 3 weiteren dateien verschateln muss damit es richtig funktioniert.
Außerdem muss ich den swicth-befehl noch in "InitializeControls" aufrufen können, kann ich so aber nicht.
des weiteren fehlt mir für m_sRActuator der Variablentyp
und den habe ich immer selbst benannt wie z. B. "Actuator m_sRActuator" - "Actuator" ist hier die Bezeichnung für mein enum-Befehl - geht hier aber nicht
-
wunderbar aber hauptsache ich soll den scheiß machen
Als was bist du angestellt? Als Gärtner oder als Programmierer?
die funktionen verstehe ich zwar aber ich weiß nicht wie ich sie einsetzen soll.
Habe die Funktion doch mit Aufruf in dem Beispiel. Also was konkret verstehst du da nicht.
des weiteren habe ich bis jetzt immer den switch-befehl zusammen mit dem enum-befehl benutzt und das kann ich hier nicht.
Wieso nicht?
Außerdem muss ich den swicth-befehl noch in "InitializeControls" aufrufen können, kann ich so aber nicht.
Wieso nicht?
des weiteren fehlt mir für m_sRActuator der Variablentyp
Da waren wir doch schon. Ist doch in diesem Beispiel ein CString.
Also ich sags mal hart du hast von der Programmierung kaum eine Ahnung. Du solltest ein Buch lesen, eine Schulung besuchen, studieren, ... . Sonst wird das nichts.
-
Als was bist du angestellt? Als Gärtner oder als Programmierer?
Ha stell dir mal vor wir wären in einem Ärtzeforum:
Also ich habe da so einen Patienten der hat die Grippe. Was soll ich nun machen. Wie zieht man die Spritze auf. Und wieso darf ich die eigentlich nur einmal verwenden. Ich habe halt schon seit einem Jahr nicht mehr praktiziert.
-
OMG ich habe nur gefragt und dann kommt sowas, was machst du dann hier wenn du gar nicht helfen willst?
ich schreibe dir sogar das ich seit über einem jahr nichts gemacht habe und dann soll ich auf anhieb wieder wissen wie das geht, KLAR!
Ich bin übrigens Auszubildene für Geräte und Systeme und keine Programmiererin aber ich soll es halt lernen mit "learning by doing"
-
Ich hoffe du meinst jetzt nicht mit sondern den lustigen Kerl da.
Versuche schon die ganze Zeit dir zu helfen. Du solltest deine Fragen nur etwas konkretisieren. Mit einfach nur geht nicht, kann dir keiner helfen.
"learning by doing" funktioniert vieleicht wenn man zumindest die Grundlagen kennt. Und nach einem Jahr sollte man diese nicht vergessen haben wenn man sie gekannt hat.
-
Ich kenne die kleinen Grundlagen aber das mit switch kannt ich nicht, stand auch in keinem meiner bücher.
nun zum problem:
wenn ich die Variable m_sRActuator als CString verwende habe ich keine Möglichkeit diese als enum einzufügen, bringt mir nur Fehler.
hier ein beispiel (auszug aus meinem programm) wie ich es immer gemacht habe und es funktioniert so ohne problem und ohne fehler
Datei SettingsDlg.cpp
void CSettingsDlg::InitializeControls(void) { switch (m_sCurrPara1) { case CHANNEL1: m_sParaChannel1.SetCurSel(0); break; case CHANNEL2: m_sParaChannel1.SetCurSel(1); break; } } void CSettingsDlg::OnCbnSelchangeParachannel1() { switch (m_sParaChannel1.GetCurSel()) { case 0: m_sCurrPara1 = CHANNEL1; break; case 1: m_sCurrPara1 = CHANNEL2; break; } }
Datei SettingsDlg.h
CComboBox m_sParaChannel1; Parachannel m_sCurrPara1;
Datei DSOZDoc.cpp
m_sCurrPara1 = CHANNEL1; // Default immer anzeigen
Datei DSOZDoc.h
Parachannel m_sCurrPara1;
Datei Light.h
enum Parachannel { CHANNEL1 = 1536, // Kanal 1 CHANNEL2 = 1600, // Kanal 2 };
Somit funktioniert das ohne Probleme und auch die Praxis hat gezeigt das es so geht. Alles hat wunderbar funtkioniert.
Deshalb ist für mich die Frage wie ich ien CString in InitializeControls oder in ein enum - einfügen kann.
Verstehst du nun was mein Problem ist
mfg
shona
-
keiner ne idee wie ich das OpenFile("") in ein enum bekomme, weil dann hätte ich zumindest das mal
-
Kannst du mir sagen wass du mit einem enum und switch case machen möchtest.
Du meintest doch das du mehrere tausend Einträge hast. Du willst nun nicht allen ernstes ein enum und ein switch case machen mit mehreren tausend Einträgen.
Also noch einmal: verwende eine STL Map.
Und übrigens ein String wandelt man in einen int mit atoi.
-
nein wollte ich nicht
In meinem beitrag mit dem beispiel sieht man was ich mit dem enum-befehl mache!!Keine Ahnung wie du das machst aber ohne enum-befehl funktioniert das nicht wie es soll.
Ich hoffe auch das dir klar ist das ich eine SDI-Anwendung habe und von meinem Dialog "Einstellungen" die Variablen an die Doc übergeben muss bzw. beim öffnen des Dialog wieder da hin sende um so di einstellungen zu speichern!
und ja ich benutze dafür auch Serialize aber diese einstellungen werden nicht übernommen.
-
Hallo Shona!
Es tut mir leid aber du sprichts in Rätseln für mich. Tut mir leid aber ich versteh überhaupt nicht was du willst. Aber vieleicht kann dir ja jemand anders helfen.
-
und was vestehst du denn nicht? Was eine SDI-Anwendung ist?
Ist doch einfach zu verstehen
Ich hab ne SDI-Anwendung in der ich einen Dialog erstellt habe in dem man die "Einstellungen" macht.
Damit die Einstellungen gespeichert werden können muss ich die Variablen in das Dokument einfügen bzw. mus ich diese aus dem Dialog "Einstellungen" in dieses speichern wenn ich im Dialog "Einstellungen auf "OK" drücke.
Wenn ich dann wieder den Dialog "Einstellungen" öffne, soll ja alles noch so sein wie ich es eingestellt habe, also muss ich die Variablen vom Dokument wieder zum Dialog schicken. Damit bleiben diese solange erhalen bis ich das Programm schließe.
-
Ich verwendet dazu UpdateAllViews aus dem CDocument.
Jeweils mit einem Hint für Load/Commit. Bei Load werden die Daten aus dem Dokument geladen und in den Dialog übertragen. Bei Commit werden die Daten aus dem Dialog in das Dokument zurückgeschrieben.
-
Das verwende ich ja aber das bringt mir bei der neuen Combobox nix weil ich das OpenFile so nicht speichern kann bzw. es wird nicht gemacht obeohl ich alles so eingetragen habe wie sonst auch
hier mal der CodeSnipsel dazu (nur ein Auszug das ist viel länger ;))
void CDSOZDoc::OnSettings() { CSettingsDlg settingsDlg; settingsDlg.m_sRActuator = m_sRActuator; if (IDOK == settingsDlg.DoModal()) { m_sRActuator = settingsDlg.m_sRActuator; //---------------------- UpdateAllViews (NULL); SetModifiedFlag (); } }
So speichere ich aber nur die Variable m_sRActuator, also das diese eben die Datei immer öffnet, aber die Combobox zeigt mir damit nicht das an was ich ausgewählt habe.
In dem Fall entweder "9300" oder "9400". Stelle ich das nun von 9300 auf 9400 und drücke "ok", sollte eigentlich diese Einstellung gespeichert sein. Wenn ich aber den Dialog jetzt wieder öffne steht die Combobox wieder auf "9300" aber es müsste "9400" sein.
-
kann mir den keiner helfen? oder ist es zu schwer zu verstehen was mein problem ist?
-
Wird denn der Wet im Dialog überhaupt zugeordnet?
Das kannst Du doch einfach im Debugger kontrollieren.