CString verändern
-
Funktioniert klasse. Vielen Dank

Aber noch eine klein Frage:
Wie kann ich die EscapeSequenz \n trennen?
\n = 0D 0A
\r = 0D
Wie bekomme in 0A?
Brauch ich alleinstehend.
habe schon versucht in einer if-Abfrage \n zu finden. Funktioniert aber leider nicht.
if(m_strXMLDatei[i] == "\n") o << '\0D' << '\0' <<'\0A' << '\0';Die Fehlermeldung lautet: error C2446: '==' : Keine Konvertierung von 'char *' in 'int'
-
if(m_strXMLDatei[i] == '\n**'**)
" durch ' austauschen
-
ja, hab ich auch gerade gefunden. Aber die If-Anweisung ist falsch.
da müssen nun die hexwerte rein. Ähnlich wie oben angegeben. Die Bytefolge muß sein: 0D 00 0A 00
also 00 ist leicht '\0'
aber irgendwie bekomme ich 0D und 0A nicht hin.
-
char chVergleich = 0x0D0A;Suchst du das hier?
-
Ich steh heut mal wieder total auf dem Schlauch.
Erklär bitte noch mal was Du machen willst.
Im moment suchst Du nach \n und gibst dann \0xd\0x0\0xa\0x0 aus.
Irgendwie erinnert mich das an MultiByte oder Unicode oder sowas in die richtung... Kann es eventuell sein das Du versuchst eine 16 Bit Zeichen Datei wie eine 8Bit Zeichen Datei zu bearbeiten ?
-
Das ist schon möglich.
Also folgendes:
ich habe mit Windows Media Encoder eine Datei namens Stream.wme erstellt.
mit dem Editor aufgemacht scheint es eine ganz normale XML Datei zu sein.
Diese habe ich nachprogrammiert, aber es läuft nicht.
Dann habe ich die Datei mit XVI.exe aufgemacht (Freewareprogramm). Hier habe ich dann gesehen, das die datei mif FF FE beginnt und nach jeden zeichen ein 00 kommt. Jetzt versuche ich das so nachzustellen. Hab auch mittlerweile fast alles. Nur wenn ich in meinen CString ein \n habe wird es 0D 0A übergeben.
In der Original-Datei wird diese Zeichenfolge aber auch durch ein 00 getrennt.
also 0D 00 0A 00
-
Haste mal CString::Replace mit "\n" und "\0xD\0x0\0xA\0x0" versucht ?
-
m_strXMLDatei.Replace("\n" , "\0xD\0x0\0xA\0x0");Klappt leider nicht. Dann habe ich überhabt kein 0D bzw. 0A mehr in meiner Datei.
-
Zeig mal die ganze Funktion.
Devil
-
// Damit der Anfang der Datei stimmt. ÿþ = Hex FF FE m_strXMLDatei = "ÿþ"; // String aus einen CStringArray str_XML[]) zusammensetzen for(int i = 0; i < str_XML.GetSize(); i++) m_strXMLDatei = m_strXMLDatei + str_XML[i]; // Versuch die Escapesequenz zu ändern. m_strXMLDatei.Replace("\n" , "\0xD\0x0\0xA\0x0"); // Datei schreiben mit '\0' nach jedem zeichen ( Ausnahme: die beiden ersten Zeichen ) ofstream o("C:\\stream.wme"); for(i =0; i < m_strXMLDatei.GetLength();i++) if(i < 2) o << m_strXMLDatei[i]; else o << m_strXMLDatei[i] << '\0'; o.close;
-
// Damit der Anfang der Datei stimmt. ÿþ = Hex FF FE m_strXMLDatei = "ÿþ"; // String aus einen CStringArray str_XML[]) zusammensetzen for(int i = 0; i < str_XML.GetSize(); i++) { if(str_XML[i]=='\n') m_strXMLDatei += "\0xD\0x0\0xA\0x0"; else m_strXMLDatei = m_strXMLDatei + str_XML[i]; } // Datei schreiben mit '\0' nach jedem zeichen ( Ausnahme: die beiden ersten Zeichen ) ofstream o("C:\\stream.wme"); for(i =0; i < m_strXMLDatei.GetLength();i++) if(i < 2) o << m_strXMLDatei[i]; else o << m_strXMLDatei[i] << '\0'; o.close;Versuchs mal so. Du musst das \n direkt beim 'kopieren' ersetzen.
Devil
-
Funktioniert leider auch nicht.
Ich habe gerade rumprobiert und was merkwürdiges rausgefunden.
m_strXMLDatei = "ÿþ"; for(int i = 0; i < str_XML.GetSize(); i++) m_strXMLDatei = m_strXMLDatei + str_XML[i]; char m_temp0xD = 0xD; char m_temp0xA = 0xA; ofstream o("C:\\stream.wme"); o.setmode(1); for(i =0; i < m_strXMLDatei.GetLength();i++) if(i < 2) o << m_strXMLDatei[i]; else if (m_strXMLDatei[i] == '\n') { //o << m_temp0xD << '\0'; //1 o << m_temp0xA << '\0'; //2 } else o << m_strXMLDatei[i] << '\0'; o.close();Wenn ich in der else if-Abfrage 1 und 2 ausführe, bekomme 0D 00 0D 0A 00.
Führe ich nur 2 aus bekomme ich 0D 0A 00.
Aber warum????
Normal ist das nicht. Es scheint so, als würde der Compiler ein 0D automatisch vor einem 0A setzen. Kann man das irgendwie abschalten / umgehen???
-
Schon mal CString durch std::string ersetzt ?
Devil
-
std::string?
was meinst du damit?
kann man vieleicht in der Datei o 2 Byte zurückgehen, das Byte dann löschen und wieder an das Ende der Datei gehen?
-
Ok ok erst lesen dann posten. std::string habe ich gefunden. könnte vieleicht auch klappen. aber wie verbinde dich zwie std::strings
m_strXMLDatei1 = m_strXMLDatei1 + str_XML[i]; funktioniert so nicht mehr.
-
mach mal einen static_cast<char>(str_XML[i]) evtl hilft das.
und += sollte schneller sein.Devil
-
for(int i = 0; i < str_XML.GetSize(); i++) m_strXMLDatei1 += static_cast<char>(str_XML[i]) ;error C2440: 'static_cast' : 'class CString' kann nicht in 'char' konvertiert werden
Gibt es vieleicht ein std::stringarray oder so was ähnliches?
-
hm, dann CString::GetBuffer(0);
Devil
-
CString::GetBuffer()???
Anstelle des CStringArray oder wie meinst du das?Ups, ich muß leider dringend weg. Meine Frau und meine beiden Kinder stehen schon unten vor der Tür und warten auf mich. Meine Tochter hat Geburtstag (3 Jahre).
Würde mich freuen, wenn ich dich morgen wieder hier im Forum treffe.
Bis dahin aber erstmal Vielen Dank und Schönen Abend
-
CString::GetBuffer()???
Anstelle des CStringArray oder wie meinst du das?Ups, ich muß leider dringend weg. Meine Frau und meine beiden Kinder stehen schon unten vor der Tür und warten auf mich. Meine Tochter hat Geburtstag (3 Jahre).
Würde mich freuen, wenn ich dich morgen wieder hier im Forum treffe.
Bis dahin aber erstmal Vielen Dank und Schönen Abend