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.

Zeichen in CString löschen

Empfohlene Antworten

Veröffentlicht

Hallo,

ich habe in einen CString Datensätze gespeichert. Meinen CString enthällt sehr viele unnütige Daten die zwischen "< >" Klamer stehen.

Dazu will ich meinen CString bereinigen.

Ich habe versucht mit der Funktion CString :: Delete () leider mache ich irgendwas fallsch, kann mir jemand bitte helfen?

Was habe ich falsch bei der Funktion gemacht, und wie kann ich es gut machen ?

CString strTextKopi;

strTextKopi = m_strText; // initialisiren (public: m_strText)

laenge = strTextKopi.GetLength(); // Länge ermitteln

laenge = laenge -1;

for(laenge; laenge > 0; laenge--)

{

if (strTextKopi[laenge] == '>')

{

zu_index = laenge;

}

if (strTextKopi[laenge] == '<')

{

auf_index = laenge;

index = 1;

}

if (index == 1)

{

strTextKopi.Delete(auf_index, zu_index);

index = 0;

}

}

Moin!

Warum verwendest du nicht CString::Find(..) und CString::Delete(::)?

Einfach mit Schleifen kombinieren und schon sollte das gehen...

PS: Quellcode läßt sich leichter mit Code-Tags lesen. :hells:

Danke guter Rat.

Es gibt aber jetzt etwes was stört.

Wenn man mit CString :: Delete arbeitet wird das CString mit neuen Zeilen nach jedem Delete operation versetzt.

Beispiel:

... <class 'ress'>Sisi</td><class 'ress'>Mimi</td><class 'ress'>Nina</td><class 'ress'>

<class 'ress'>90</td><class 'ress'>60</td><class 'ress'>90</td><class 'ress'>

<class 'ress'>017399</td><class 'ress'>016055</td><class 'ress'>017022</td><class 'ress'>

......

nach dem Delete Operazion siet so aus:

Sisi

Mimi

Nina

90

60

90

017399

016055

017022

was ich will ist aber das die Datensätze so sind:

SisiMimiNina

906090

017399016055017022

was ich brauche.

Ich habe es wersucht bei Delete einen zeichen weniger zu löschen und statt ">" einen Backspace zu machen. Das solte das negatiwe Efekt von der Neuezeile kompensieren. Es klapt aber nicht:

strTextKopi.Replace(">", "\b"); // '\b' Backspace

Konnt ihr mir noch bischen helfen?

void CE_LearnView::StringAendern()

{

CString strTextKopi;

CString strVertig;

int index = 0; // laufvariable

int laenge = 0; // gesammt Länge von CString

int auf_index = 0; // index für "<" (Klameer auf)

int zu_index = 0; // index für ">" (Klameer zu)

strTextKopi = m_strText; // initialisiren

//strVertig = "";

laenge = strTextKopi.GetLength(); // Länge ermitteln

laenge = laenge - 1;

for(laenge; laenge >= 0; laenge--)

{

if (strTextKopi[laenge] == '>')

{

zu_index = laenge + 1;

}

if (strTextKopi[laenge] == '<')

{

auf_index = laenge;

index = 1;

}

if (index == 1)

{

zu_index = zu_index - auf_index;

strTextKopi.Delete(auf_index, zu_index);

index = 0;

zu_index = 0;

auf_index = 0;

}

}

strTextKopi.Replace("\n", ""); // ES FUNKTIONIERT LEIDER NICHT

m_strText = strTextKopi;

MessageBox(strTextKopi);

}

So...versuchen wir es mal so...

void CE_LearnView::StringAendern() 

{ 

	CString strTextKopi = m_strText;

	int index = 0;

	int endIndex = 0;

	int laenge = strTextKopi.GetLenght();



	while (index <= laenge)

	{

		index = strTextKopi.Find('<');

		if (-1 == index)

			break;

		endIndex = strTextKopi.Find('>');

		if (-1 == endIndex)

			break;

		strTextKopi.Delete(index, endIndex - index);

                 laenge = strTextKopi.GetLenght();

	}


	// Nun sollte das Ergebnis ordentlich in strTextKopi stehen...

	m_strText = strTextKopi; 

	MessageBox(strTextKopi); 

}

Ich habe gerade mit deinen Code versucht. Das Programm bleibt stehen.

Danke für die Code ebenfalls.

Ich habe nicht erwent das das CString von eine HTML Seite gefühlt wird. Das soll aber keinen Problem sein, weil ich alle Tags lösche.

Die Code funktioniert bei mir leider nicht nicht:

CString strTextKopi;

	strTextKopi = m_strText;

	int index = 0;

	int endIndex = 0;

	int laenge ;

	laenge = strTextKopi.GetLength();



	while (index <= laenge && index != -1 && endIndex != -1)

	{

		index = strTextKopi.Find('<');

		if (-1 == index)

			break;

		endIndex = strTextKopi.Find('>');

		if (-1 == endIndex)

			break;

		strTextKopi.Delete(index, endIndex - index);

                 laenge = strTextKopi.GetLength();

	}


	// Nun sollte das Ergebnis ordentlich in strTextKopi stehen...

	m_strText = strTextKopi; 

	MessageBox(strTextKopi); 

Es ist endlosschleife, das Code bringt das Programm zum stehen

Die Zeile meinst du vielleicht:

strTextKopi.Delete(index, (endIndex - index + 1));

Nach alle bemühungen kann ich nur sagen, dass das Problem irgendwo anders liegt.

Jetzt ist die Code felerfrei, aber das Ergebnis immer noch wie früher

sisi

mimi

katja

90

60

90

usw...

Vieleicht liegt daran, dass ich eine HTML umwandle .............

Hehe...nö - war ein kleiner aber entscheidenter Fehler von mir! :D

So sollte es nun aber klappen...


	CString strTextKopi;

	strTextKopi = m_strText;

	int index = 0;

	int endIndex = 0;

	int laenge ;

	laenge = strTextKopi.GetLength();



	while (index != -1 && endIndex != -1) {

			index = strTextKopi.Find('<', index);

			if (-1 == index)

				break;

			endIndex = strTextKopi.Find('>', index);

			if (-1 == endIndex)

				break;

			strTextKopi.Delete(index, endIndex - index + 1);

			laenge = strTextKopi.GetLength();

	}


	// Nun sollte das Ergebnis ordentlich in strTextKopi stehen...

	m_strText = strTextKopi; 

	MessageBox(strTextKopi); 

Mit dieser Code habe ich geschaft von einer rohen HTML-Datei

den Tags zu löschen und nach jeder Datensetz eine ";" zu schreiben.

So wird die Datei beim speichern eine so genannte *.csv Datei.

void CE_LearnView::StringAendern2()

{

	CString strHtmlKopi		=("");	// HTML-Code mit Tags

	CString strHtmlDaten	=("");	// nur die Daten aus der HTML-Code

	CString strZeichen		=("");	


	int iLaenge;					// Lände der CString 

	int iIndex;						// lauf wariable

	int iKlamer_auf = 0;			// Position in dem CString von '<' Klammer

	int	iKlamer_zu	= 0;			// Position in dem CString von '>' Klammer


	strHtmlKopi		= m_strHtml;	


	// Es wird die Position für neue Zeile markiert

	strHtmlKopi.Replace("</TR>","###</TR>");	

	// nicht ausgefühlete Kästchen in der Datenbank  werden mit leere Zeichen eingefühlt

	strHtmlKopi.Replace("><","> <");

	// Es werden Sonderzeichen bearbeitet

	strHtmlKopi.Replace("&","&");

	strHtmlKopi.Replace(".",",");


	iLaenge = strHtmlKopi.GetLength();

	iLaenge = iLaenge - 1;



	for (iIndex = 0; iIndex <iLaenge; iIndex++)

	{


		if (strHtmlKopi[iIndex] == '>')

		{	

			iKlamer_zu = iIndex + 1 ;

		}


		if (strHtmlKopi[iIndex] == '<')

		{

			iKlamer_auf = iIndex;

		}



		if (iKlamer_zu !=0 && iKlamer_auf != 0  && strHtmlKopi[iKlamer_auf - 1] != '\n')

		{

			for (iKlamer_zu; iKlamer_zu < iKlamer_auf; iKlamer_zu++)

			{	

				// Zeichenweise kopieren den Text, 

				// den zwischen Klammer stehet <TAGS> TEXT <TAGS> 

				strZeichen = strHtmlKopi.GetAt(iKlamer_zu);

				// die Zeichen in der strHtmlDaten speichern	

				strHtmlDaten += strZeichen;

			}	

			// gespeicherte Datensätze werden mit Koma getrent

			strHtmlDaten += ";";


			iKlamer_zu  =0;

			iKlamer_auf =0;

		}

	}

	// die erste 5 Zeichen in der fertigen CString werden gelöscht

	// die sollen ' ; ;' sein, so kann die Tabele leichter angepast werden !!!!!

	strHtmlDaten.Delete(0,5);

	// neue Zeilen werden ermittelt

	strHtmlDaten.Replace("###","\n");


	// KONTROLLE  MessageBox(strHtmlDaten);

	m_strHtmlDaten = strHtmlDaten;

}

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.