Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Anfängerproblem mit String zerlegung

Empfohlene Antworten

Veröffentlicht

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.

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;

}

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.

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.

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 ;)

Nein ist schon ok. Danke dafür. Jetzt sollte ich das schon irgendwie auf die kete kriegen hoffe ish.

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.