Forum:Lisp
Thema:wcmatch
Möchten Sie sich registrieren?
Wer darf antworten? Registrierte Benutzer können Beiträge verfassen.
Hinweise zur Registrierung Sie müssen registriert sein, um Beiträge oder Antworten auf Beiträge schreiben zu können.
Ihr Benutzername:
Ihr Kennwort:   Kennwort vergessen?
Anhang:    Datei(en) anhängen  <?>   Anhänge bearbeiten  <?>
Grafik für den Beitrag:                                                
                                                       
Ihre Antwort:

Fachbegriff
URL
Email
Fett
Kursiv
Durchgestr.
Liste
*
Bild
Zitat
Code

*HTML ist AUS
*UBB-Code ist AN
Smilies Legende
Netiquette

10 20 40

Optionen Smilies in diesem Beitrag deaktivieren.
Signatur anfügen: die Sie bei den Voreinstellungen angegeben haben.

Wenn Sie bereits registriert sind, aber Ihr Kennwort vergessen haben, klicken Sie bitte hier.

Bitte drücken Sie nicht mehrfach auf "Antwort speichern".

*Ist HTML- und/oder UBB-Code aktiviert, dann können Sie HTML und/oder UBB Code in Ihrem Beitrag verwenden.

T H E M A     A N S E H E N
romi1

Beiträge: 603 / 1

Xeon E3-1245V2
16GB RAM
Windows 7 Professional 64 bit
AutoCAD 2012
AutoCAD Structural Detailing 2012

Hallo!

Ich möchte mittels wcmatch einen String auf div. Sonderzeichen überprüfen:

(setq string "fj\"28")
(wcmatch string "*[[](){}<>?:"|\/* ]*")

Es soll also auf jene Zeichen, die sich innerhalb der (äußeren) eckigen Klammern befinden überprüft werden. Das klappt aber leider so nicht.

Vielleicht gibt es aber einen anderen, einfacheren Weg - ich möchte einen gegebenen String überprüfen, ob nur Buchstaben, Zahlen und noch einige Zeichen wie _ - + # . vorkommen bzw. diese Zeichen zulassen.

Hat jemand einen Tipp ?

Gruß,
Roman

CADmium

Beiträge: 13377 / 249

.

vielleicht sowas
(defun ENTHAELT-SONDERZEICHEN?(STRING SONDERZEICHENSTRING)
  (> (length(vl-remove-if-not
                '(lambda(X)
                   (member X (vl-string->list SONDERZEICHENSTRING))
                 )                 
                 (vl-string->list STRING)
            )
     )
     0
  )
)
(ENTHAELT-SONDERZEICHEN?  " Alles ok " "*[[](){}<>?:\"|\\/*]*")


läßt du den length-vergleich weg , bekommst du sogar ne Liste mit den enthaltenen Sonderzeichen zurück ....

mit wcmatch auf Sonderzeichen prüfen muss ein ` vorangestellt werden

(wcmatch "N*ame" "*`**") -> T
(wcmatch "Name"  "*`**") -> nil

und noch als Ergänzung:

(defun OHNESONDERZEICHEN(STRING SONDERZEICHENSTRING)
  (setq A (vl-string->list SONDERZEICHENSTRING))
  (apply
    'strcat
    (mapcar
      'chr     
      (vl-remove-if
        '(lambda(X)
          (member X A)
        )                 
        (vl-string->list STRING)
      )
    )   
  )
)
------------------
      - Thomas -
"Bei 99% aller Probleme ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben."

wronzky

Beiträge: 2154 / 30

CAD:
AutoCAD 2.6 bis 2014
ADT 2005 - 2014
Arcibem
System:
Windows 2000, XP, NO VISTA
Internet-Startseite:
http://www.archi.de

kleine Umstellung, grosse Wirkung:
Code:
(wcmatch string "*[][(){}<>?:\"|\\/* ]*")
liefert das gewünschte Ergebnis. die schliessende Eckige Klammer ] MUSS nämlich am Anfang stehen, sonst wird sie als Ende der "oder"-Funktion angesehen.

Grüsse, Henning

------------------
Henning Jesse
VoxelManufaktur
Computer-Dienstleistungen für Architekten und Ingenieure

  http://www.voxelman.de

romi1

Beiträge: 603 / 1

Xeon E3-1245V2
16GB RAM
Windows 7 Professional 64 bit
AutoCAD 2012
AutoCAD Structural Detailing 2012

@ Thomas: sicher eine gute Lösung, aber mit den vl-Gschichteln kenn' ich mich leider noch nicht aus ...
@ Henning: genial !

DANKE!

Gruß, Roman