Zum Inhalt springen

Anfängerproblem mit String zerlegung


Dl3xe

Empfohlene Beiträge

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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?

Link zu diesem Kommentar
Auf anderen Seiten teilen

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;

}

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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. :P Versuch es selber hinzubekommen, falls du probleme hasch, meld dich einfach wieder ;)

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...