| |
|
|
| 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
|
|
|
| |
|
|
|
| |
|
| |
|
|
|
| Leider klappt das nicht. - Wenn die ANSI-Zeichen nicht so wild durcheinander ständen, könnte 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 |
|
|
| |
|
|
|
RGH | iF
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.
Gruß 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 |
|
|
| |
|
|
|
| |
|
| |
|
|
|
Nico Madysa | |
|
| |
|
|
|
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-Datei für 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
|
|
|
| |
|
|
|
| Ich brauchte es eben selber und dabei ist mir in Rolands Code aufgefallen das er Zeichen überspringt.
Deshalb habe ich eine imho kaum (vlt. über 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 für 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. |
|
|
| |
|
|