Kitty82 Geschrieben 9. Juni 2006 Geschrieben 9. Juni 2006 Hallo Zusammen, ich weiss jetzt ehrlich gesagt nicht, wie ich das wieder hinbekommen soll. Da ich mir nicht sicher bin, ob diese Infos hier wichtig sind, schreib ich sie trotzdem mal dazu: Ich arbeite mit MS Visual 6.0. Gestern lief das Programm. Dann erfuhr ich von MS Visual 2005 Express, hab es mir runtergeladen und wollte es installieren. Während es installiert hat, hat es versucht etwas vom Internet runterzuladen. Jedoch klappte das nicht, da die Verbindung im Geschäft schlecht war und somit brach ich die Installation ab. Noch so am Rande: habe MS Visual 2005 Express nicht in das selbe Verzeichnis wie MS Visual 6.0 installiert. Auf jeden Fall ist es so, dass es seitdem Fehler gibt in meinem Programm. Er bringt mir überall, wo ich CString::Find(unsigned short,int) aufgerufen habe, folgendes: error C2664: 'int __thiscall CString::Find(unsigned short,int) const' : Konvertierung des Parameters 1 von 'char [4]' in 'unsigned short' nicht moeglich Quelltext dazu: int pos = wholeFile.Find("<h", pos_n) Mein Problem ist nun, dass ich nicht weiss, wie ich das wieder beheben kann? Hoffe, mir kann hier jemand helfen ein dickes Danke-Schön im Voraus!:byby: Zitieren
Klotzkopp Geschrieben 9. Juni 2006 Geschrieben 9. Juni 2006 VS2005 ist standardmäßig auf UNICODE eingestellt, d.h. alles, was auf TCHAR basiert - dazu zählt auch CString - arbeitet mit wide characters. Du kannst das entweder in den Projekteinstellungen wieder auf Multi-Byte zurücksetzen, oder deinen ganzen Code auf wide character umstellen, d.h. char durch wchar_t ersetzen und ein großes L vor Zeichen- und Zeichenkettenliterale stellen. Wenn dein Code beides können soll, musst du TCHAR und die passenden Funktionen und Makros benutzen. Zitieren
Kitty82 Geschrieben 9. Juni 2006 Autor Geschrieben 9. Juni 2006 Du bist mein Retter in der Not!! Dank dir für die schnelle Hilfe! (hab schon langsam mehr keine Haare auf 'n Kopf ) Zitieren
Kitty82 Geschrieben 9. Juni 2006 Autor Geschrieben 9. Juni 2006 Hallo Zusammen, da bin ich nochmal. Nachdem das obere Problem gelöst ist, stehe ich vor dem "alten" Problem. Und zwar, zur besseren Verständnis: ich lese eine große HTML-Datei (z.Bsp. Handbuch) ein und zerpflücke es, um die einzelnen Kapitel als extra Dateien abzuspeichern. Momentan teste ich mit einem japanisch sprachigen Handbuch. Nun suche ich nach "<h" um zu wissen, wo ein Kapitel anfängt. Dank CString::Find ist das ja möglich. Durchs debuggen habe ich festgestellt, dass er dieses "<h" in einem Handbuch nicht findet, obwohl es ganz sicher da ist. (Habe zum Test, kurzbevor er in dem CString sucht, diesen CString ausgeben lassen und gesehen, dass eins da ist). Auf die Groß- bzw. Kleinschreibung habe ich auch geachtet. Verstehe absolut nicht, warum er mir trotzdem -1 zurück liefert. Aufrufen, tu ich die Funktion auch korrekt. Mit einem englisch sprachigen Handbuch funktioniert es. hat auch hier jemand Rat? Danke!! Zitieren
Kitty82 Geschrieben 9. Juni 2006 Autor Geschrieben 9. Juni 2006 Am besten zeig ich dir den Code: const char* file_name = m_openpath; FILE* fp = fopen(file_name, "rt"); fseek(fp, 0, SEEK_END); int size = ftell(fp); fseek(fp, 0, SEEK_SET); char* getfile = new char[size + 1]; int realSize = fread(getfile, sizeof(char), size, fp); getfile[realSize] = 0; fclose(fp); CString file(getfile); wholeFile = file; delete [] getfile; Zitieren
Klotzkopp Geschrieben 9. Juni 2006 Geschrieben 9. Juni 2006 Welche Werte bekommst du denn für size und realSize? Zitieren
Kitty82 Geschrieben 9. Juni 2006 Autor Geschrieben 9. Juni 2006 oh oh .... size ist größer als realSize, aber woran liegt das? Zitieren
Klotzkopp Geschrieben 9. Juni 2006 Geschrieben 9. Juni 2006 size ist größer als realSize,Die genauen Werte wären interessant gewesen. aber woran liegt das?Das kann mehrere Ursachen haben. Um auf der sicheren Seite zu sein, würde ich zunächst empfehlen, nicht die MFC und die Standard-C-Dateifunktionen zu mischen. Lies die Datei mit CStdioFile und ReadString zeilenweise ein. Das kannst du auch zu einem großen CString zusammenfügen. Zitieren
Kitty82 Geschrieben 9. Juni 2006 Autor Geschrieben 9. Juni 2006 ja klar, kannst du den genauen Wert haben (sorry, dachte das wäre nicht interessant) size = 189303 realSize = 185329 Mit ReadString hatte ich am Anfang, hab es geändert, da ich dachte, die aktuelle Funktion ist schneller? :confused: Zitieren
Klotzkopp Geschrieben 9. Juni 2006 Geschrieben 9. Juni 2006 size = 189303 realSize = 185329Hat die Datei knapp 4000 Zeilen? Mit ReadString hatte ich am Anfang, hab es geändert, da ich dachte, die aktuelle Funktion ist schneller? :confused:Vorzeitige Optimierung ist die Wurzel allen Übels. (50 Cent fürs Phrasenschwein ) Hat es mit ReadString denn funktioniert? Zitieren
Kitty82 Geschrieben 9. Juni 2006 Autor Geschrieben 9. Juni 2006 ja kommt in etwa hin (3975) wieso ist das wichtig? (50 Cent fürs Phrasenschwein ) hä, was? Wieso bekomm i das net? Hat es mit ReadString denn funktioniert? keine Ahnung, hab erst seit gestern die Handbücher in chinesisch und japanisch bekommen. ReadString hab ich schon ziemlich am Anfang des Projekts rausgenommen. Werde es aber mal testen! Dank dir ganz herzlichst, für deine schnelle Hilfe! :byby: Zitieren
Klotzkopp Geschrieben 9. Juni 2006 Geschrieben 9. Juni 2006 ja kommt in etwa hin (3975) wieso ist das wichtig? 189303 - 185329 = 3975. Das sollte nur meine Vermutung bestätigen. Bei Textdateien bekommen Zeilenumbrüche eine Sonderbehandlung. Wenn es nur etwa 2000 Zeilen gewesen wären, hätte es ein Unicode-Problem sein können. Wobei HTML-Dateien eigentlich nicht in Unicode sein sollten. Was bekommst du den nach dem Einlesen bei file.GetLength()? Dank dir ganz herzlichst, für deine schnelle Hilfe! :byby:*unauffällig auf den Ring deut* Zitieren
Guybrush Threepwood Geschrieben 9. Juni 2006 Geschrieben 9. Juni 2006 *unauffällig auf den Ring deut* auf den an deinem Finger oder den da in der kleine Schachtel? @Kitty82 Hast du mal im Debugger oder per Ausgabe überprüft was nach dem Einlesen in deinem String steht? Zitieren
Kitty82 Geschrieben 9. Juni 2006 Autor Geschrieben 9. Juni 2006 189303 - 185329 = 3975. Das sollte nur meine Vermutung bestätigen. Bei Textdateien bekommen Zeilenumbrüche eine Sonderbehandlung. Wenn es nur etwa 2000 Zeilen gewesen wären, hätte es ein Unicode-Problem sein können. Wobei HTML-Dateien eigentlich nicht in Unicode sein sollten. Was bekommst du den nach dem Einlesen bei file.GetLength()? Er zeigt mir 185329 an. Wieso interessiert dich die Dateilänge? (*versuch deine Vorgehensweise zu verstehen*) Ich habe ja den String ausgegeben, und da war er komplett (habe es mit der Datei, die ich eingelesen hab, verglichen). *unauffällig auf den Ring deut* och, des macht nix *meinen auch kurz aufblitzen lass* Trotzdem kann man sich mal bedanken.... oder soll ich lieber = :pssst: auf den an deinem Finger oder den da in der kleine Schachtel? ach, so hab ich das noch gar nicht betrachtet *lol* @Kitty82 Hast du mal im Debugger oder per Ausgabe überprüft was nach dem Einlesen in deinem String steht? ja, das gleiche wie zu beginn. Alles vorhanden. Das Suchwort ist sogar auch da und gleich geschrieben (meine, auf Groß- und Kleinschreibung geachtet!) Zitieren
Guybrush Threepwood Geschrieben 9. Juni 2006 Geschrieben 9. Juni 2006 hmmm Quelltext dazu: int pos = wholeFile.Find("<h", pos_n) Ist das da noch aktuell? wenn ja was ist pos_n? Liegt das vielleicht hinter dem Teil im String? Was passiert wenn du den 2. Parameter weg lässt? Zitieren
Kitty82 Geschrieben 9. Juni 2006 Autor Geschrieben 9. Juni 2006 Jap, ist noch aktuell. pos_n hat den Wert 0, beim ersten Aufruf. direkt beim ersten Aufruf erhalte ich auch für pos die -1 Hier mal die ganze Schleife: while(true) { //suche <h1 pos = wholeFile.Find("<h1", pos_n); if(pos == -1) break; else { //suche nächstes <h1 //und kopiere es aus wholeFile raus //... } } Auch wenn ich pos_n weglasse, erhalte ich den Rückgabewert -1 Habe mir soeben nochmals die Datei kurz davor ausgeben lassen. Ist haar genau die selbe, die ich auch einlese! Zitieren
Guybrush Threepwood Geschrieben 9. Juni 2006 Geschrieben 9. Juni 2006 was liefert dir denn wholeFile.GetLength() ? Ansosten fällt mir noch ein das vielleicht der Inhalt in deinem CString nicht Unicode ist, das "<h1" aber als Unicode angesehen wird. Ob das aber je nach Projekteinstellung sein kann und was man dagegen machen würde kann ich dir nicht sagen. Klotzkopp aber bestimmt Zitieren
Kitty82 Geschrieben 9. Juni 2006 Autor Geschrieben 9. Juni 2006 wholeFile ist genauso lang wie file.... also kurz: ich hab das ganze nicht als _Unicode laufen! Dachte, dass ich das nicht benötige :confused: wg. dem HTML-Code.... hoffentlich, hat der Master *lol* noch einen Rat/Tipp :confused: Zitieren
Anybody Geschrieben 9. Juni 2006 Geschrieben 9. Juni 2006 Du könntest auch anstatt dich mit der Funktion rumzuärgern selber nach dem Zeichen suchen? Geht auch schneller. ( Sichwort Binäre Suche ) Zitieren
Kitty82 Geschrieben 9. Juni 2006 Autor Geschrieben 9. Juni 2006 ah ja ok. müsste ich mir mal ansehen.... danke. Aber ist das die Lösung, wenn ich das nächste Mal das gleiche Problem hab? Binäresuche anstatt CString? :confused: Zitieren
Klotzkopp Geschrieben 9. Juni 2006 Geschrieben 9. Juni 2006 Binäre Suche setzt sortierte Daten voraus. Möglicherweise meint Anybody etwas anderes :confused: Kitty82, wenn es nicht gegen Geheimhaltungs- oder Vertraulichkeitsvorschriften verstößt, kannst du mir die Datei schicken? Das interessiert mich jetzt. Zitieren
UltimateRuppi Geschrieben 9. Juni 2006 Geschrieben 9. Juni 2006 Du könntest auch anstatt dich mit der Funktion rumzuärgern selber nach dem Zeichen suchen? Geht auch schneller. ( Sichwort Binäre Suche ) Nein das geht nicht, bei der binären Suche, muss der durchsuchte Raum nämlich sortiert sein. Das ist bei einer Textdatei aber nicht gegeben. Hier muss man schon sequentiell suchen. Zitieren
Kitty82 Geschrieben 9. Juni 2006 Autor Geschrieben 9. Juni 2006 Kitty82, wenn es nicht gegen Geheimhaltungs- oder Vertraulichkeitsvorschriften verstößt, kannst du mir die Datei schicken? Das interessiert mich jetzt. könntest du mir bitte deine Email-Addi als PN schicken? Verstehe ich es richtig, du willst nur die HTML-Datei? Zitieren
Guybrush Threepwood Geschrieben 9. Juni 2006 Geschrieben 9. Juni 2006 Die Lösung würde mich dann aber auch interessieren 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.