Dl3xe Geschrieben 16. Juni 2006 Geschrieben 16. Juni 2006 Da dies mein erster Beitrag hier ist sag ich erstmal hallo an euch alle. Ich stehe so ziemlich am anfang meiner Ausbildung zum AE und versuche mich grade ein wenig in die MFC Programmierung mit Visual C++ 6 einzuarbeiten. Allerdings bin ich nur auf folgendes Problem gestoßen. Leider ist es mit meinem momentanen Wissenstand noch nicht sehr weit her deshalb hat mir die Suche auch nicht wirklich weiter geholfen. Ich möchte eine CString Variable die aus einem Eingabefeld kommt in mehrere Teile zerlegen und in verschiedenen Arrays einer anderen Variable speichern. Als Seperator wird das ";" verwendet. Als Kommandozeilenprogramm habe ich es folgendermaßen gelöst: while ( doc.eof()==false ) { getline ( doc, s_var, ';'); i++; s_varout[i]=s_var; } Allerdings wird hierbei der Text aus einem Dokument geholt und nicht wie in der MFC Anwendung aus einem Eingabefeld. Kann mir vieleicht jemand erklären wie das funktioniert? Wenn möglich und nicht zuviel verlangt mit einem kurzen Textbeispiel damit auch ich DAU es verstehe. Danke für die Hilfe. Zitieren
Kitty82 Geschrieben 16. Juni 2006 Geschrieben 16. Juni 2006 was hast du schon mit MS Visual 6 bzw. MFC gemacht? Am einfachsten finde ich die Lösung, dass du eine Membervariable dem EditFeld zuordnest (durch den MFC-Klassenassistenten). Dort enthält sich später dein CString und den kannst du dann mit unterschiedlichen Funktionen http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vcmfc98/html/_mfc_cstring_class_members.asp zerpflücken. oder wo hast du n Problem? Zitieren
Dl3xe Geschrieben 16. Juni 2006 Autor Geschrieben 16. Juni 2006 Das ist mein erster MFC Gehversuch. Deswegen habe ich wirklich Null Erfahrung. Jch hatte ja eigentlich gehofft, daß es für die MFC eine ähnliche Anweisung geben würde, wie ich sie für die Konsolenversion Verwendet habe. Quasi eine Schleife, die den String Zeichenweise bis zum Ende einliest und bei jedem Semikolon das Array wechselt in das geschrieben wird. Sowas wie while ( String != NULL ) { getline ( String, s_var, ';'); i++; s_varout[i]=s_var; } Zitieren
Kitty82 Geschrieben 16. Juni 2006 Geschrieben 16. Juni 2006 Den CString musst du nicht einlesen, er steht bereits in deiner Membervariable drin. Um die Membervariable zu erstellen, wähle (glaub) Strg+W und der Klassenassistent müsste sich öffnen. Dann wechsle das Registerblatt auf Membervariable und ordne deinem Editfeld eine hinzu (Typ CString!). Dann füge z.Bsp. einen Button in deinen Dialog ein und klicke dann mit doppelklick auf ihn. Füge dann UpdateData(true); (oder false? musste mal testen) ein und dann deine Schleife. Das zu dem. Die Schleife schreiben kannst du dann? Schau dir CString::Find() an und ggf. CString::Mid() an, mit denen beiden Funktionen müsstest du es hinbekommen. Zitieren
Dl3xe Geschrieben 16. Juni 2006 Autor Geschrieben 16. Juni 2006 OK danke für die Hilfe. Ich werde es mal versuchen. Ich pack hier aber einfach mal das rein was ich schon habe. Vieleicht wirds dann etwas klarer was genau ich brauche. void CIndexCreatorDlg::OnButton1() { // TODO: Code für die Behandlungsroutine der Steuerelement-Benachrichtigung hier einfügen CStdioFile DateiSpeichern; CString strDateiName, strEdit1; CString strEdit2; CString strEdit3; CString strEdit4; CString strEdit5; CString part1,part2, part3, part4, part5, part6, part7, part8; CString s_link, s_linkout[100000], s_fullstring; int i, j; part1="<html><head><title>"; part2="</tilte><style type=text/css><!--body {background-color: "; part3=";}td {text-align: center;vertical-align: middle;}h1 {color: "; part4=";}.Stil1 {font-size: 9px;color: "; part5=".Stil1:hover {font-size: 9px;color: "; part6=";text-decoration: underline;};text-decoration: none;}--></style></head><body><div align=center><h1>"; part7="</h1><table border=0 cellspacing=0 cellpadding=8>"; part8="</table><p>Erstellt mit IndexCreator_1.0.1</p></div></body></html>"; // Pfad zum SPeichern angeben strDateiName = "C://text.html"; // Eingabefeld auslesen GetDlgItemText(seitenname, strEdit1); GetDlgItemText(headline, strEdit2); GetDlgItemText(inhalt, strEdit3); GetDlgItemText(bgfarbe, strEdit4); GetDlgItemText(txtfarbe, strEdit5); Hier Fehlt die Funktion. // Eingabefeld in Datei sichern if (DateiSpeichern.Open(strDateiName, CFile::modeCreate | CFile::modeWrite )) { DateiSpeichern.WriteString (part1+strEdit1+part2+strEdit4+part3+strEdit5+part4+strEdit5+part5+strEdit5+part6+strEdit2+part7+strEdit3+part8) ; DateiSpeichern.Close (); MessageBox ("Daten wurden gespeichert", "Daten gespeichert", MB_ICONINFORMATION); } else MessageBox ("Fehler beim Öffnen der Datei - Speichern wurde abgebrochen", "Fehler", MB_ICONINFORMATION); } In eines der Textfelder wird dann eine Liste mit HTML Bildlinks eingegeben die durch ein ";" getrennt sind. URL1;URL2;URL3;URL4; Was das Programm jetzt eigentlich machen soll, ist die Links zu trennen, Teilstring[0]=URL1 Teilstring[1]=URL2 usw. und die HTML Tags dazwischen zu setzen, daß es einen HTML Table ergibt. "<tr><td>"+Teilstring[0]+"</td><td>"+Teilstring[1]+"</td><td>"+Teilstring[2]+"</td></tr>"[code] usw. Hinterher wird die ganze Geschichte als Bildergalerie gespeichert. Zitieren
Kitty82 Geschrieben 16. Juni 2006 Geschrieben 16. Juni 2006 habe eben an soetwas gedacht: void CIndexCreatorDlg::OnButton1() { //... UpdateData(TRUE); while(true) { pos = m_editfeld.Find(";", pos_start); if(pos == -1) break; else { /*hier weisst du die position wo das ; liegt und weisst daher wie lang die URL ist und kannst sie mit hilfe von CString::Mid den text herausfischen*/ } } } ich kann dir ja nicht die ganze schleife schon fix und fertig hier reinschreiben. Versuch es selber hinzubekommen, falls du probleme hasch, meld dich einfach wieder Zitieren
Dl3xe Geschrieben 16. Juni 2006 Autor Geschrieben 16. Juni 2006 Nein ist schon ok. Danke dafür. Jetzt sollte ich das schon irgendwie auf die kete kriegen hoffe ish. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.