JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=af9d6b1f6572649e11a4703db696f433Medaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

wchar_t und \\

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
schneidi74
Senior JLI'ler



Anmeldedatum: 14.05.2004
Beiträge: 243

Medaillen: Keine

BeitragVerfasst am: 20.02.2008, 21:15    Titel: wchar_t und \\ Antworten mit Zitat

N'abend allerseits,

hab da mal ein kleines String-Problem, und zwar hab ich einen Dateipfad als wchar_t String. Sie in etwa so aus:
G:\___Projekte\SVN\ce_testapp\test.txt

So nu hab ich aber das Problem das der string so in manchen Funktionen als Datei unbrauchbar ist, da dort eigentlich der \ durch \\ ersetzt sein muss.

Wie krieg ich jetzt diesen String umgewandelt das er so aussieht:
G:\\___Projekte\\SVN\\ce_testapp\\test.txt

Einfach zeichenweise durchgehen scheitert schonmal daran, dass ich dem Vergleich den String "\" nicht übergeben kann ( es wird "\\" erwartet )

Danke schonmal für Ideen....
_________________
-+- SchNeiDi74 -+-
-+- www.creative-games.de -+-
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
FH
Super JLI'ler


Alter: 36
Anmeldedatum: 16.10.2004
Beiträge: 438

Medaillen: Keine

BeitragVerfasst am: 21.02.2008, 16:40    Titel: Antworten mit Zitat

OK, langsam:
Du hast einen wchar_t-String. Das ist ein String, wie jeder andere, eben in Unicode.
So. Nun willst du offensichtlich diesen String an eine Methode oder so übergeben.
Wenn ich das programmieren müsste, würde ich es folgendermaßen schreiben:
CPP:
int main()
{
    CKlasse Obj;
    Obj.Methode(L"G:\\___Projekte\\SVN\\ce_testapp\\test.txt");
    return 0;
}

Was er da an die Methode übergibt ist ja der Text "G:\___Projekte\SVN\ce_testapp\test.txt", weil die "\" ja nur Escape-Zeichen sind.
Hoffe mal, ich hab das Problem richtig verstanden.
Gruß

FH
_________________
goto work, send your kids to school
follow fashion, act normal
walk on the pavement, watch T.V.
save for your old age, obey the law
Repeat after me: I am free
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
DirectXer
Dark JLI'ler



Anmeldedatum: 05.02.2005
Beiträge: 1201
Wohnort: Köln
Medaillen: Keine

BeitragVerfasst am: 21.02.2008, 18:02    Titel: Antworten mit Zitat

wenn du in einem string s alle "\" durch "\\" ersetzen willst, könntest du das folgendermaßen machen:
CPP:
std::string::size_type pos = 0;
while( (pos = s.find('\\', pos+2) != std::sting::npos )
     s.replace( pos, 1, "\\\\" );


Das geht in deinem Fall, ist generell aber unflexibel. Am besten ist, wenn du zuerst alle \ durch eine beliebige Platzhalterzeichenfolge (z.B "%BS%", da dies normalerweise nicht vorkamm ersetzt, da du dann eine Art "rekursive" Ersetzung nutzen kannst. Geht aber auch so.

Noch 2 Anmerkungen: in find() ist '\\' wegen des escape-Zeichens nur 1 Zeichen und zwar '\', deshalb die einfachen anführungszeichen. in replace dagegen ists "\\\\" was sich zu 2 Zeichen auflöst: "\\", deshalb doppelte Anführungszeichen.

Gruß DXer
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
schneidi74
Senior JLI'ler



Anmeldedatum: 14.05.2004
Beiträge: 243

Medaillen: Keine

BeitragVerfasst am: 21.02.2008, 21:29    Titel: Antworten mit Zitat

DirectXer hat Folgendes geschrieben:

CPP:
std::string::size_type pos = 0;
while( (pos = s.find('\\', pos+2) != std::sting::npos )
     s.replace( pos, 1, "\\\\" );




Das könnte klappen, wenn du mir jetzt noch verrätst wie ich meinen "stinknormalen" wchar_t* in ein std::basic_string<wchar_t*> kriege und später wieder zurück...
_________________
-+- SchNeiDi74 -+-
-+- www.creative-games.de -+-
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
FH
Super JLI'ler


Alter: 36
Anmeldedatum: 16.10.2004
Beiträge: 438

Medaillen: Keine

BeitragVerfasst am: 21.02.2008, 21:34    Titel: Antworten mit Zitat

Indem du:
CPP:
std::basic_string<wchar_t> s="C:\\...";
while( (pos = s.find('\\', pos+2) != std::sting::npos )
     s.replace( pos, 1, "\\\\" );

machst. Wink
Gruß

FH
_________________
goto work, send your kids to school
follow fashion, act normal
walk on the pavement, watch T.V.
save for your old age, obey the law
Repeat after me: I am free
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Deviloper
Junior JLI'ler



Anmeldedatum: 31.05.2006
Beiträge: 77

Medaillen: Keine

BeitragVerfasst am: 21.02.2008, 21:37    Titel: Antworten mit Zitat

Denke nicht Wink
CPP:
std::basic_string<wchar_t> s="C:\\...";
can not convert from const char* to const wchar_t* Wink L vergessen ... Aber Konstruktoren rocken!
Warum typedef std::wstring auflösen?

CPP:
std::wstring string(L"C:\\...");
while ((pos = string.find(L'\\', pos + 2) != std::sting::npos )
     string.replace(pos, 1, L"\\\\" );
Wink
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
schneidi74
Senior JLI'ler



Anmeldedatum: 14.05.2004
Beiträge: 243

Medaillen: Keine

BeitragVerfasst am: 21.02.2008, 21:37    Titel: Antworten mit Zitat

Leider hab ich aber meinen Dateipfad bereits als "normalen" wchar_t* string vorliegen, und einfach auf den basic_string<wchar_t> raufkopieren erreicht leider chaotische zustände...
_________________
-+- SchNeiDi74 -+-
-+- www.creative-games.de -+-
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
PeaceKiller
JLI Master


Alter: 35
Anmeldedatum: 28.11.2002
Beiträge: 970

Medaillen: Keine

BeitragVerfasst am: 21.02.2008, 21:39    Titel: Antworten mit Zitat

schneidi74 hat Folgendes geschrieben:
Leider hab ich aber meinen Dateipfad bereits als "normalen" wchar_t* string vorliegen, und einfach auf den basic_string<wchar_t> raufkopieren erreicht leider chaotische zustände...


Glaubst du nicht, dass es noch chaotischer wird, wenn du das selber machst?
_________________
»If the automobile had followed the same development cycle as the computer, a Rolls-Royce would today cost $100, get a million miles per gallon, and explode once a year, killing everyone inside.«
– Robert X. Cringely, InfoWorld magazine
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
DirectXer
Dark JLI'ler



Anmeldedatum: 05.02.2005
Beiträge: 1201
Wohnort: Köln
Medaillen: Keine

BeitragVerfasst am: 23.02.2008, 20:28    Titel: Antworten mit Zitat

schneidi74 hat Folgendes geschrieben:
Leider hab ich aber meinen Dateipfad bereits als "normalen" wchar_t* string vorliegen, und einfach auf den basic_string<wchar_t> raufkopieren erreicht leider chaotische zustände...

Wieso? Sowas sollte ohne Probleme gehen:
CPP:
const wchar_t* wcstr = L"test";
std::wstring wstr( wcstr );
// bzw. std::wstring wstr = wcstr;, was aber bei manchen Compilern einen Deut langsamer sein könnte
Für Casts zwischen std::string und std::wstring kannst du den char_cast<> benutzen, den du hier im Forum (glaube FAQ) mit der Bordsuche finden kannst. Wenn du den brauchst und nicht findest / verstehst, kann ich dir auch meine Version anbieten.

Gruß DXer
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung Alle Zeiten sind GMT
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum