Veröffentlicht 5. Oktober 200519 j 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; } }
5. Oktober 200519 j 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:
5. Oktober 200519 j 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?
5. Oktober 200519 j 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); }
5. Oktober 200519 j 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); }
5. Oktober 200519 j 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.
5. Oktober 200519 j Hm...endlosschleifenprogrammierung ist ein altes Laster von mir... Probiere es dann doch mal mit: while (index <= laenge && index != -1 && endIndex != -1)
5. Oktober 200519 j 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);
5. Oktober 200519 j Die Code funktioniert bei mir leider nicht nicht: Geht nicht ist keine ausreichende Fehlerbeschreibung! Bitte etwas genauer...
5. Oktober 200519 j 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 .............
5. Oktober 200519 j Hehe...nö - war ein kleiner aber entscheidenter Fehler von mir! 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);
10. Oktober 200519 j 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.