Italia
Fonte/ Codesnippets

Ausklammern Sonderzeichen

 
In einem Multiedit möchte ich gerne alle Sonderzeichen ausklammern. Ich hab mir eine Procedur geschrieben, welche das auch prima erledigt. Meine Frage an die Experten: Kann man das auch kürzer schreiben. Bestimt gibt es eine Schleife dafür, aber mein alter Kopf...
PROC SONDERZEICHEN

    titel$=TRANSLATE$(titel$, ,-)  das soll so sein. Leerzeichen mit Bindestrich ersetzen
    titel$=TRANSLATE$(titel$,CHR$(34),)
    titel$=TRANSLATE$(titel$,§,)
    titel$=TRANSLATE$(titel$,$,)
    titel$=TRANSLATE$(titel$,%,)
    titel$=TRANSLATE$(titel$,&,)
    titel$=TRANSLATE$(titel$,/,)
    titel$=TRANSLATE$(titel$,(,)
    titel$=TRANSLATE$(titel$,),)
    titel$=TRANSLATE$(titel$,=,)
    titel$=TRANSLATE$(titel$,?,)
    titel$=TRANSLATE$(titel$,`,)
    titel$=TRANSLATE$(titel$,!,)
    titel$=TRANSLATE$(titel$,°,)
    titel$=TRANSLATE$(titel$,²,)
    titel$=TRANSLATE$(titel$,³,)

    titel$=TRANSLATE$(titel$,{,)

        titel$=TRANSLATE$(titel$,[,)
        titel$=TRANSLATE$(titel$,],)

    titel$=TRANSLATE$(titel$,},)

    titel$=TRANSLATE$(titel$,,)
    titel$=TRANSLATE$(titel$,*,)
    titel$=TRANSLATE$(titel$,,)
    titel$=TRANSLATE$(titel$,~,)
    titel$=TRANSLATE$(titel$,#,)
    titel$=TRANSLATE$(titel$,+,)
    titel$=TRANSLATE$(titel$,|,)
    titel$=TRANSLATE$(titel$,µ,)

ENDPROC

 
09.06.2008  
 



Probiere mal
titel$=match$([A-Za-z0-9~-],titel$)
 
09.06.2008  
 



Leider klappt das nicht. -
Wenn die ANSI-Zeichen nicht so wild durcheinander ständen, potuto man das einfach mit einer Schleife machen. Aber da die Sonderzeichen in Blöcken zwischen den Buchstaben und Zahlen sind, müssten das mehrere Schleifen sein und dann ist der Code auch nicht kleiner wie in meiner Procedur
 
09.06.2008  
 




RGH
iF
Probiere mal
titel$=match$([A-Za-z0-9~-],titel$)


Das funktioniert definitiv nicht wie gewünscht (wohl gepostet, ohne vorher zu testen? ;) ), aber so geht es:
PROC SONDERZEICHEN

    parameters titel$
    titel$=TRANSLATE$(titel$, ,-) das soll so sein. Leerzeichen mit Bindestrich ersetzen
    alle verbotenen Zeichen entfernen

    whileloop 1, len(titel$)

        case instr(substr$(titel$, &loop), q§$%&/()=?`!°²³{[]}*+#+|µ) > 0 : titel$ = del$(titel$,&loop,1)

    endwhile

    return titel$

ENDPROC

Var Test$ = Hühnerhof, Rindviefarm, 23%, $34.a[oho], 56µ 123² * 456³ / 45% A&O
Print Sonderzeichen(test$)
waitinput
end

BTW: Vor XProfan 11 muß man das substr$(titel$, &loop) durch mid$(titel$,&loop,1) ersetzen.

Saluto
Roland
 
Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4
09.06.2008  
 



@Roland
Du bist der Grösste
Danke
 
09.06.2008  
 



 
09.06.2008  
 




Nico
Madysa
Funktioniert es auch so?
proc SONDERZEICHEN

    parameters titel$
    declare a%
    titel$ = Translate$(titel$, ,-)
    a% = Set(RegEx,1)
    titel$ = Translate$(titel$,[q§~$%&/~(~)=~?`!°²³~{~[~]~}\~*#~+~|µ) ],)
    Set(RegEx,a%)
    return titel$

endproc

 
Nico Madysa
09.06.2008  
 




Thomas
Freier
???

In einem Multiedit möchte ich gerne alle Sonderzeichen ausklammern.


Ersetzen oder ausklammern auf Rolfs Art:
Edit: Zeichen in einem Editfeld nicht zulassen
 $I PROFALT.INC	Include-File per Quellcodes früher Profan-Versionen (vor XProfan 11.0), die noch keine Operatoren nutzen.
Bei Verwendung von  XProfan < 11.0 kann die obige Include-Zeile $I PROFALT.INC bedenkenlos gelöscht werden.
Lauffähig ab Profan-Version 6.6
Die Prozedur CHECK_INPUT VERBIETET EINE REIHE
übergebener Zeichen in einem Editfeld.
(c) by Rolf Koch - Rokosoft 2005
 $P+
SetErrorLevel 0
DIESE PROC WERTET AUS  ************************************************************

PROC CHECK_INPUT

    Declare BLEN$,BLAENGE%,RET$
    PARAMETERS IN&,BCHST$
    BLAENGE%=1
    RET$=

    WHILENOT len(BCHST$)+1 = BLAENGE%

        BLEN$=MID$(BCHST$,BLAENGE%,1)

        IF INSTR(BLEN$,gettext$(in&))

            Settext in&,del$(gettext$(in&),len(gettext$(in&)),1)
            setfocus(in&)
            sendmessage(in&,$00B1,len(gettext$(IN&)),len(gettext$(IN&))+1) Cursor an den Schluss setzen
            RET$=blen$

        ENDIF

        INC BLAENGE%

    WEND

    RETURN RET$

ENDPROC

***************************************************************************************
Windowtitle Verbotene Zeichen
Cls
Declare Dlg&
Declare Taste%
Declare Dlg_Ende%
Declare Eingabe&
Dlg& = Create(Dialog,%Hwnd,Bitte etwas eingeben,350,50,180,70)
Eingabe& = Create(Edit,Dlg&,,10,10,150,20)
SetFocus(Eingabe&)
Dlg_Ende% = 0
Print In diesem Beispiel verboten:
Print/*-_>< (siehe CHECK_INPUT ...)
Print ---------------------------------
Whilenot Dlg_Ende%
Waitinput
IF GETFOCUS(EINGABE&)
AUFRUF UND AUSWERTUNG ****************************************
CHECK_INPUT Eingabe&,/*-_><
PARAMETER: HANDLE EDITFELD UND LISTE VERBOTENE ZEICHEN
CASE $(0) <>  : PRINT VERBOTENES ZEICHEN GEFUNDEN:  + $(0)
***************************************************************
ENDIF
If Equ(Taste%,2)
Dlg_Ende% = 1
DestroyWindow(Dlg&)
Endif
Wend
End
 
Gruß Thomas
Windows XP SP2, XProfan X2
10.06.2008  
 



Ich brauchte es eben selber und dabei ist mir in Rolands Code aufgefallen das er Zeichen überspringt.

Deshalb habe ich eine imho kaum (vlt. circa regexp) schleunigbare Routine erstellt:
 {$cleq}

stringToAllowedChars(string s,alwdChrs){

    long c=len(s),i
    caseNot c : return

    do {

        i+

        ifNot inStr(subStr$(s,i),alwdChrs) {

            s=del$(s,i,1)
            i-
            c-

        }

        case i==c : break

    }

    return s

}

Var Test$ = Hühnerhof, Rindviefarm, 23%, $34.a[oho], 56µ 123² * 456³ / 45% A&O
Print stringToAllowedChars(test$,45)
waitinput
end
hier auch per XProfan ohne xpse:
proc STRINGTOALLOWEDCHARS

    PARAMETERS S$,ALWDCHRS$
    var C&=LEN(S$)
    var I&=0

    IFNOT C&

        RETURN

    ENDIF

    WHILE 1

        INC I&

        IFNOT INSTR(SUBSTR$(S$,I&),ALWDCHRS$)

            S$=DEL$(S$,I&,1)
            DEC I&
            DEC C&

        ENDIF

        IF I&=C&

            BREAK

        ENDIF

    ENDWHILE

    RETURN S$

endproc

VAR TEST$=Hühnerhof, Rindviefarm, 23%, $34.a[oho], 56µ 123² * 456³ / 45% A&O
PRINT STRINGTOALLOWEDCHARS(TEST$,45)
WAITINPUT
end
Hab ich vlt. auch etwas im Code übersehen? In meinen wenigen Tests ergaben sich keine Fehler.
 
23.06.2008  
 



Zum Quelltext


Topictitle, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Topic-Options

7.817 Views

Untitledvor 0 min.
Walter14.10.2019
Erasmus.Herold11.06.2019
AndreasS10.02.2019
Pauli19.06.2014
Di più...

Themeninformationen



Admins  |  AGB  |  Applications  |  Autori  |  Chat  |  Informativa sulla privacy  |  Download  |  Entrance  |  Aiuto  |  Merchantportal  |  Impronta  |  Mart  |  Interfaces  |  SDK  |  Services  |  Giochi  |  Cerca  |  Support

Ein Projekt aller XProfaner, die es gibt!


Il mio XProfan
Private Notizie
Eigenes Ablageforum
Argomenti-Merkliste
Eigene Beiträge
Eigene Argomenti
Zwischenablage
Annullare
 Deutsch English Français Español Italia
Traduzioni

Informativa sulla privacy


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie