Don_Pazo Geschrieben 5. Oktober 2005 Geschrieben 5. Oktober 2005 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; } } Zitieren
Hexagon Geschrieben 5. Oktober 2005 Geschrieben 5. Oktober 2005 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: Zitieren
Don_Pazo Geschrieben 5. Oktober 2005 Autor Geschrieben 5. Oktober 2005 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? Zitieren
Hexagon Geschrieben 5. Oktober 2005 Geschrieben 5. Oktober 2005 Hm... Bei mir klappt das eigentlich... Poste doch bitte mal etwas code... Zitieren
Don_Pazo Geschrieben 5. Oktober 2005 Autor Geschrieben 5. Oktober 2005 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); } Zitieren
Hexagon Geschrieben 5. Oktober 2005 Geschrieben 5. Oktober 2005 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); } Zitieren
Don_Pazo Geschrieben 5. Oktober 2005 Autor Geschrieben 5. Oktober 2005 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. Zitieren
Hexagon Geschrieben 5. Oktober 2005 Geschrieben 5. Oktober 2005 Hm...endlosschleifenprogrammierung ist ein altes Laster von mir... Probiere es dann doch mal mit: while (index <= laenge && index != -1 && endIndex != -1) Zitieren
Don_Pazo Geschrieben 5. Oktober 2005 Autor Geschrieben 5. Oktober 2005 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); Zitieren
Hexagon Geschrieben 5. Oktober 2005 Geschrieben 5. Oktober 2005 Die Code funktioniert bei mir leider nicht nicht: Geht nicht ist keine ausreichende Fehlerbeschreibung! Bitte etwas genauer... Zitieren
Don_Pazo Geschrieben 5. Oktober 2005 Autor Geschrieben 5. Oktober 2005 Es ist endlosschleife, das Code bringt das Programm zum stehen Zitieren
Hexagon Geschrieben 5. Oktober 2005 Geschrieben 5. Oktober 2005 So...mal in den Debugger schauen und schon sieht man des Rätsellösung! Zitieren
Don_Pazo Geschrieben 5. Oktober 2005 Autor Geschrieben 5. Oktober 2005 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 ............. Zitieren
Hexagon Geschrieben 5. Oktober 2005 Geschrieben 5. Oktober 2005 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); Zitieren
Don_Pazo Geschrieben 10. Oktober 2005 Autor Geschrieben 10. Oktober 2005 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; } Zitieren
Empfohlene Beiträge
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.