Zum Inhalt springen

auf einmal Fehler mit CString


Kitty82

Empfohlene Beiträge

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:

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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!!

Link zu diesem Kommentar
Auf anderen Seiten teilen

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;

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.
Link zu diesem Kommentar
Auf anderen Seiten teilen

size = 189303

realSize = 185329

Hat 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?

Link zu diesem Kommentar
Auf anderen Seiten teilen

ja kommt in etwa hin (3975)

wieso ist das wichtig?

(50 Cent fürs Phrasenschwein )

hä, was?

Wieso bekomm i das net? :D

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:

Link zu diesem Kommentar
Auf anderen Seiten teilen

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* ;)
Link zu diesem Kommentar
Auf anderen Seiten teilen

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? :D

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!)

Link zu diesem Kommentar
Auf anderen Seiten teilen

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!

Link zu diesem Kommentar
Auf anderen Seiten teilen

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 :)

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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?

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...