Sonderzeichen aussortieren
-
Ich habe eine Webadresse als WideString (keine Ahnung warum das so gegeben ist
) gegeben. Und ich möchte die Adresse als eindeutige Bezeichnung für einen Dateinamen benutzen unter dem ich die Adresse abspeichern kann. Aber in dem Dateinamen dürfen ja keine Punkte und so sein... Ist das villeicht doch nicht so geschickt so ?
-
Hannah schrieb:
Hallo !
Wie kann ich denn aus einem WideString die Sonderzeichen aussortieren. Also so das aus zB "T%e.s/t", "Test" wird ?hab zwar keine wide strings, sondern echte strings, aber habe ähnliche problemchen (ich mache meinen c++-kurs neu).
rein technisch läuft's bei mir so oder so ähnlich:string titleToPath(string const& title){ string path; for(string::const_iterator i=title.begin();i!=title.end();++i) if(*i==' '){ path.push_back('%'); path.push_back("0123456789ABCDEF"[*i/16]); path.push_back("0123456789ABVDEF"[*i%16]); } else{ path.push_back(*i); } path.push_back('/'); return path; }und zu ersetzen sind anscheinend recht wenige:
http://www.december.com/html/spec/esccodes.htmldie umlaute werde ich wohl so ersetzen: 'ä' -> "ae", 'Ä' -> "Ae" ...
und den rest mache ich wohl platt zu '_'.
mal abwarten, ob mir ne liste der erlaubten zeichen in urls noch zufliegt.
-
Hannah schrieb:
Ich habe eine Webadresse als WideString
Woher, aus was für einer Variablen, Funktion etc.?
Und ich möchte die Adresse als eindeutige Bezeichnung für einen Dateinamen benutzen unter dem ich die Adresse abspeichern kann.
Wie genau willst du die Datei speichern (mit welcher Funktion, Klassenmethode o.ä.)?
-
Also ich habe das jetzt so gemacht, das ich mit var.del(var.pos("."),1);
die Sachen rauslösche ist zwar nicht so elegant aber für meinen Zweck reichts...
-
Muss man dich auf Knien anflehen, damit du etwas mehr Informationen preisgibst, um ggf. zu einer sauberen Lösung zu kommen?
Wenn du keine Vorschläge haben willst, warum stellst du dann erst eine Frage?
-
Also es ist eine Übungsaufgabe daher kein Zusammen hang. Weiss auch nicht warum das ein WideString ist. gepeichert wird mit Memo1->Lines->Savetofile(dateiname). Und eben dieser dateuname muss aus der webadresse gebastelt werden der als widestring vorliegt.
-
Was nicht verstehe ist, wie du zu den vermeintlichen Sonderzeichen kommst. Deinem anderen Beitrag zufolge vermute ich, dass das etwas mit dem CppWebBrowser zu tun hat!? Zeig doch einfach mal per Code, wie du den String bekommst, denn du weiterverarbeiten sollst.
-
WideString tempURL; BSTR URL; tempURL = ListBox1->Items->Strings[0]; URL = BSTR(tempURL); wb->Navigate(URL); // OnDocumentLoaded TComInterface<IHTMLDocument2> HTMLDocument; if( SUCCEEDED(wb->Document->QueryInterface(IID_IHTMLDocument2, (LPVOID*)&HTMLDocument)) ) { TComInterface<IPersistStreamInit> PersistStrm; if( SUCCEEDED(HTMLDocument->QueryInterface(IID_IPersistStreamInit, (LPVOID*)&PersistStrm)) ) { std::auto_ptr<TStringStream> StrStrm(new TStringStream("")); std::auto_ptr<TStreamAdapter> Adapter(new TStreamAdapter(StrStrm.get(), soReference)); PersistStrm->Save(*Adapter, TRUE); StrStrm->Position = 0; Memo1->Lines->LoadFromStream(StrStrm.get());Also die URL wird mehr oder weniger angegeben (steht eben als erstes in einer ListBox. Diese wird dann zum Laden der Seite mit dem WebBrowser benutzt, um den Source Code der Seite dann in einem Memo zu speichern. (Das Passiert erst wenn das Dokument fertig geladen ist - wusste nicht so wie ich das hier darstellen soll).Ja und diesen Code möchte ich als eindeutige Datei speichern. und ich dachte die Webadresse ist ja eindeutig jetzt müssen nur noch die Sonderzeichen raus...
-
Jansen schrieb:
Was nicht verstehe ist, wie du zu den vermeintlichen Sonderzeichen kommst. Deinem anderen Beitrag zufolge vermute ich, dass das etwas mit dem CppWebBrowser zu tun hat!? Zeig doch einfach mal per Code, wie du den String bekommst, denn du weiterverarbeiten sollst.
will man dieses forum mal sich komplett auf die platte saugen, um es in ruhe an nem wochenende daheim zu lesen, dann hat man immer das probem, daß links so aussehen:
http://forum.c-plusplus.net/viewtopic.php?t=78185&highlight=
abseichern würde ich es nicht unter
forum.c-plusplus.net/viewtopic.php
weil dann liegen ja alle thread auf der selben datei und überschreiben sich.
also muß man was machen, was die sonderzeichzen weghaut (oder quotet).
denn & und = müssen ja nicht in dateinamen klappen.
bereits einfaches unterstriche-draus-machen geht normalerweise fein.
http://forum.c-plusplus.net/viewtopic.php_t_78185_highlight_
ne andere anwendung ist ein cacheing proxy, der einfach bei jeder dateianforderung mal guckt, ob lokal nicht ne noch aktuelle kopie liegt. man kann mit fetten indizes arbeiten, aber schlicht mit files und deren timestamp gehts auch schon fein. es muss nur gewährleistet sein, daß aus jeder internet-url ein filename wird, der auf platte sepicherbar ist, und daß unterschiedliche urls (normalerweise) auch unterschiedliche filenames ergeben.diese "übungsaufgabe" ist eigentlich mal erstaunlich praxisnah.
-
Hannah schrieb:
Also die URL wird mehr oder weniger angegeben (steht eben als erstes in einer ListBox. Diese wird dann zum Laden der Seite mit dem WebBrowser benutzt, um den Source Code der Seite dann in einem Memo zu speichern. [...] Ja und diesen Code möchte ich als eindeutige Datei speichern. und ich dachte die Webadresse ist ja eindeutig jetzt müssen nur noch die Sonderzeichen raus...
Ah ja, jetzt verstehe ich was du meinst. Mit deinem expliziten Bezug auf den WideString und dem etwas unglücklich gewählten Beispiel "T%e.s/t" hast du mich verwirrt.
Ich war davon ausgegangen, dass du irgendwelche Probleme mit dem (bei WideStrings vorhandenen) zweiten Byte der einzelnen Zeichen hast.Dir ging es einfach um das Entfernen oder Ersetzen der Slashes etc. in einer URL?
-
Ja genau

-
Ja genau
