Visual C++ CString :: Delete

Don_Pazo

Erfahrenes Mitglied
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 ?

Code:
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;
		}
	}
 
Zuletzt bearbeitet:
Die Funktion CString::Delete hat das folgende Format
Code:
int Delete(int nIndex,int nCount = 1 );
Dabei ist nIndex das erste zu löschende Zeichen. Das steht wohl auch richtig in auf_index. nCount gibt die Anzahl der zu löschenden Zeichen an. Du übergibst aber die Länge des Strings bis zur schliessenden Klammer. Richtig muß es heißen
Code:
strTextKopi.Delete(auf_index, zu_index-auf_index);
eventuell muß das Ergebnis noch um 1 korrigiert werden, je nachdem, ob du die Klammern mitlöschen willst oder nicht.

Mfg

langer
 
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?
 
Hi.

Don_Pazo hat gesagt.:
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.
Nein, wird es nicht. Delete löscht lediglich die entsprechenden Zeichen aus dem String. Der Fehler muß also irgendwo in deinem Code liegen.

Don_Pazo hat gesagt.:
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.
Nein, sowas funktioniert nur auf der Console wenn die Zeichen entsprechend interpretiert werden. Mit deinem Code wird nur ein ">" durch ein "\b" ersetzt.

PS: Und verwende doch bitte das nächste Mal die Code-Tags.
 
Anhand des Codes kann ich die Ursache nicht erkennen. Auf jeden Fall muß da aber noch eine Schleife sein, die du benutzt, um alle Zeichenfolgen zu entfernen. Irgendwo da muß ein Zeilenumbruch sein. Poste doch mal den gesamten Schleifen-Code.

Mfg

langer
 
Don_Pazo hat gesagt.:
... <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'>

moin!

kann es sein, dass du versuchst html-code mit deinem programm zu bearbeiten
vielleicht liegt der fehler dann bei den <td>-tags. in deinem auszug machst du nämlich die tags nur zu ( </td> ), aber nich auf ( <td> ).
das kann bei der html-ausgabe zu genau so einem fehler (zeilenumbruch) führen!

bis denn
kochi
 
Zurück