[?] strip tags programm
-
dann lass mal das const in meiner funktionsdeklaration weg.
ist dort nämlich sowieso fehl am platz - ist ja C da tun wir nix mit const machen tun
-
Naja, Goto macht man doch auch eigentlich nicht...
Tja, es kompiliert - funktioniert aber nicht.
Deine Funktion sieht nach Beheben der Compilerfehler so aus:void CStripTagsApp::stripBBTags(char const* text, char* output, int tagcount, char* tags[]) { size_t i=0; size_t size=strlen(text); loop: while(i<size) { size_t j; for(j=1; j<tagcount; ++j) { size_t length=strlen(tags[j]); if(!strncmp(text+i, tags[j], length)) { i+=length; goto loop; } } *output++=text[i]; ++i; } *output=0; }
Achja, aufgerufen wird sie so:
char *pchData = (char*)GlobalLock(hClipboardData); char* pOut = new char[strlen(pchData)+1]; char* pTags[] = {"[kor]","[/kor]"}; stripBBTags(pchData, pOut, 2, pTags);
Ich habe ihn gefüttert mit:
bla test ende
und rausgekommen ist
bla [kor]test ende
PS: Innerhalb der kor-Tags funktionieren keine Code-Tags.
-
Problem gelöst, Funktion überlistet.
char* pTags[] = {"[ kor]","[ /kor]","[ kor]"}; // Ohne Leerzeichen, die sind zum Sichtbar machen. stripBBTags(pchData, pOut, 3, pTags);
Jetzt gehts:
http://www.estartu.de/temp/StripTags.exe <-- runterladen und viel Spaß
-
Morgen,
ich kann das Programm nicht starten, es stuertzt sofort ab.
mfg
v R
-
Huch, keine Meldung, nix?
Du hast aber Windows? (Ich weiß grade nicht, wer hier die Linuxer waren...)Ich probiers mal auf nem anderen PC.
Edit: Unter Win98 ohne Devstudio läuft es. Hab extra die runtergeladene Exe genommen.
Hast du gelesen, dass es keine GUI hat?
Du musst einfach den Text in die Zwischenablage kopieren, Starten und wieder pasten.Zu Deutsch: Wenn du nix siehst, war alles okay.
-
estartu_de schrieb:
Huch, keine Meldung, nix?
Du hast aber Windows? (Ich weiß grade nicht, wer hier die Linuxer waren...)Ich probiers mal auf nem anderen PC.
Edit: Unter Win98 ohne Devstudio läuft es. Hab extra die runtergeladene Exe genommen.
Hast du gelesen, dass es keine GUI hat?
Du musst einfach den Text in die Zwischenablage kopieren, Starten und wieder pasten.Zu Deutsch: Wenn du nix siehst, war alles okay.
Sorry, das war ja wohl eine Newbie-Fehlerbeschreibung von mir ;).
Also: Jetzt stuertzt es nicht mehr ab. KA, warum das beim ersten start der Fall war,
da kam zumindest eine 'Fehlerbericht senden' Meldung.Jetzt funzt es
mfg
v R
-
beachte außerdem, dass bisher kein artikel mit [ kor ]-tags versehen wurde. meine beiden habe ich noch mit [ u ]-tags machen müssen.
BTW: ich bin die Sonntagabend nich da.
grüße,
Mr. B
-
Schön, wenn es jetzt geht.
@Mr.B meinen Artikel habe ich schon durchkorrigiert und hoffentlich nichts übersehen.
-
mein fehler. statt j=1 muss es j=0 heissen (in der for schleife). das ist noch von der argv version übriggeblieben. sorry.
-
Okay, ich habs korrigiert. Jetzt funktioniert es auch und die neue Version ist hochgeladen.
-
Jetzt stuertzt es wieder bei mir ab, "TODO: <Dateibeschreibung> hat ein Problem
festgestellt und muss beendet werden".Aber vielleicht geht das wieder weg, wie mit der anderen Version ;).
mfg
v R
-
Hab ich mich mit den Zeigern irgendwo verzeigert? Oder auch Shade?
Ist ja ärgerlich...
-
estartu_de schrieb:
Hab ich mich mit den Zeigern irgendwo verzeigert? Oder auch Shade?
Ist ja ärgerlich...habs nachgeprüft und sehe bei mir keinen fehler... was natürlich nicht heisst, dass der code korrekt sein muss
gib mal beispiel text bei dem es abschmiert. was ist zB wenn bilder statt text in der zwischenablage sind? nur so als anregung...
reproduzierbare fehler wären klasse
-
Da ich mich erstmal um anderes kümmern muss, hier der Code.
Aus dem und Shades Funktion besteht es.BOOL CStripTagsApp::InitInstance() { CWinApp::InitInstance(); if (OpenClipboard(NULL)) { // Retrieve the Clipboard data (specifying that // we want ANSI text (via the CF_TEXT value). HANDLE hClipboardData = GetClipboardData(CF_TEXT); // Call GlobalLock so that to retrieve a pointer // to the data associated with the handle returned // from GetClipboardData. char *pchData = (char*)GlobalLock(hClipboardData); char* pOut = new char[strlen(pchData)+1]; char* pTags[] = {"[kor]","[/kor]"}; stripBBTags(pchData, pOut, 2, pTags); // Unlock the global memory. GlobalUnlock(hClipboardData); // Leermachen EmptyClipboard(); // Speicher reservieren (incl. \0) HGLOBAL hCpDaten = GlobalAlloc(GMEM_DDESHARE, strlen(pOut)+1); // Daten in systemweiten Speicher schieben pchData = (char*)GlobalLock(hCpDaten); strcpy(pchData, pOut); // Für andere zur Verfügung stellen GlobalUnlock(hCpDaten); // Daten in die Zwischenablage schieben SetClipboardData(CF_TEXT, hCpDaten); // Fertig CloseClipboard(); } return FALSE; }
-
Shade Of Mine schrieb:
estartu_de schrieb:
Hab ich mich mit den Zeigern irgendwo verzeigert? Oder auch Shade?
Ist ja ärgerlich...habs nachgeprüft und sehe bei mir keinen fehler... was natürlich nicht heisst, dass der code korrekt sein muss
gib mal beispiel text bei dem es abschmiert. was ist zB wenn bilder statt text in der zwischenablage sind? nur so als anregung...
reproduzierbare fehler wären klasse
Es stuertzt ab, sobald ich es starte.
mfg
v R[edit]
Ok, das Programm stuertzt ab, wenn keine Daten im Zwischenspeicher vorhanden sind.
[/edit]
-
Fehler gefunden.
NULL Pointer fehler. ts ts tsGlobalAlloc liefert NULL wenn es einen 'Fehler' gab. Und einen Fehler gibt es dann wenn GetClipboardData ein ungueltiges Handle liefert wenn nix in der Zwischenablage liegt.
Floglich schmiert strlen(NULL) dann ab.
btw:
2 GlobalLock
1 GlobalAlloc
und nur ein
1 GlobalUnlocksicher dass das richtig ist...?
-
Ich guck mir das Montag noch mal an.
Damit wird erstmal was haben, habe ich das aus Codeproject kopiert und so lange angepasst, bis das gewünschte Ergebnis raus kam.Hier habe ich keinen Compiler, aber wenn man weiß, dass was kopiert sein sollte, müsste es ja so auch erstmal gehen.
-
wo gibts die neuste exe zum download? link...
Mr. B
-
Sorry, ich habe gestern einen mittelgroßen Ringkampf mit der MSDE ausgetragen.
Geht gleich los, ich geb hier Bescheid.Der Link ist immer der selbe, ich überschreibe die alte Version einfach.
Wow, das war ja einfach. Ich habe es jetzt mit einem Screenshot in der Zwischenablage getestet und es macht dann einfach nichts.
Oder wünscht sich jemand eine Meldung?
-
estartu_de schrieb:
Sorry, ich habe gestern einen mittelgroßen Ringkampf mit der MSDE ausgetragen.
Geht gleich los, ich geb hier Bescheid.Der Link ist immer der selbe, ich überschreibe die alte Version einfach.
Wow, das war ja einfach. Ich habe es jetzt mit einem Screenshot in der Zwischenablage getestet und es macht dann einfach nichts.
Oder wünscht sich jemand eine Meldung?Och ich denke, dass ist nicht noetig
mfg
v R