Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

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;

}

}

Geschrieben

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:

Geschrieben

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?

Geschrieben

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

}

Geschrieben

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

}

Geschrieben

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.

Geschrieben

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

Geschrieben

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 .............

Geschrieben

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

Geschrieben

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;

}

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...