Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  Hier mal drei Funktionen zur Stringzerlegung

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte
Autor Thema:  Hier mal drei Funktionen zur Stringzerlegung (1191 mal gelesen)
Andreas Kraus
Mitglied
Elektrotechniker


Sehen Sie sich das Profil von Andreas Kraus an!   Senden Sie eine Private Message an Andreas Kraus  Schreiben Sie einen Gästebucheintrag für Andreas Kraus

Beiträge: 1356
Registriert: 11.01.2006

WIN 10
ACAD 2022

erstellt am: 30. Jul. 2008 14:39    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo zusammen,
ich hab folgendes gefunden:

String Zerlegung Buchstaben/Zahlen
Beitrag

und hab folgende drei Funktionen dazu beizutragen die alles an Strings zerlegen können was mir bisher in die Finger gekommen ist.
Bis jetzt hats funktioniert, aber wenn jemand was optimieren kann - immer her damit
Und wenns jemand brauchen kann - viel Spass damit.

Gruß
Andreas

(defun zerlege_text (text filter rückgabe)
;;;  sucht alle kleinstmöglichen Teilstrings auf die der Suchfilter noch zutrifft,
;;;  zerlegt den String an diesen Stellen
;;;  gibt eine Liste mit Teilstrings zurück
;;;
;;;  Die mit dem Suchfilter gefundenen Teilstrings werden bei:
;;; - rückgabe=0 nicht entfernt
;;; - rückgabe=1 entfernt
;;; - rückgabe=2 zurückgegeben
;;; - rückgabe=3 Daten für Befehl substr entsprechend rückgabe 0
;;; - rückgabe=4 Daten für Befehl substr entsprechend rückgabe 1
;;; - rückgabe=5 Daten für Befehl substr entsprechend rückgabe 2
;;;
;;;  Die Teilstrings werden durch eine Suchmuster ermittelt dessen Aufbau unter "wcmatch" nachzulesen ist
;;;  Beispiele für filter
;;;    (setq filter "*#`.#*")
;;;    (setq filter "*[~0-9]*")
;;;    (setq filter "*[~0123456789`,]*")
;;;    (setq filter "*#`.?*")
;;;    (setq filter "*`,#*")
;;;
;;;  benötigt werden die Unterfunktionen : mk_substr_list, wcmatch_pos

  (cond
    ((= rückgabe 0)
    (mapcar '(lambda (teil) (substr text (nth 0 teil) (nth 1 teil)))
    (mk_substr_list text filter)
    )
    )
    ((= rückgabe 1)
    (mapcar '(lambda (teil) (substr text (nth 0 teil) (nth 1 teil)))
    (wcmatch_pos text filter)
    )
    )
    ((= rückgabe 2)
    (mapcar '(lambda (teil) (substr text (nth 0 teil) (nth 1 teil)))
    (vl-remove-if
      '(lambda (data) (member data (wcmatch_pos text filter)))
      (mk_substr_list text filter)
    )
    )
    )
    ((= rückgabe 3)
    (mapcar '(lambda (teil) (list (nth 0 teil) (nth 1 teil)))
    (mk_substr_list text filter)
    )
    )
    ((= rückgabe 4)
    (mapcar '(lambda (teil) (list (nth 0 teil) (nth 1 teil)))
    (wcmatch_pos text filter)
    )
    )
    ((= rückgabe 5)
    (mapcar '(lambda (teil) (list (nth 0 teil) (nth 1 teil)))
    (vl-remove-if
      '(lambda (data) (member data (wcmatch_pos text filter)))
      (mk_substr_list text filter)
    )
    )
    )
  )
)

(defun mk_substr_list (text filter / f_list ergebniss_list pos)
;;;  sucht alle kleinstmöglichen Teilstrings auf die der Suchfilter noch zutrifft,
;;;  gibt eine Liste mit Listen zurück die die Werte für substr enthalten
;;;  Die mit dem Suchfilter gefundenen Teilstrings werden NICHT entfernt
;;;  benötigt wird die Unterfunktionen : wcmatch_pos

  (if (wcmatch text filter)
    (progn
      (setq f_list (wcmatch_pos text filter)
    pos   1
      )
      (foreach teil f_list
(setq start (nth 0 teil))
(if (> start pos)
  (setq ergebniss_list
(cons (list pos (- start pos)) ergebniss_list)
  )
)
(setq ergebniss_list (cons teil ergebniss_list)
      pos     (+ start (nth 1 teil))
)
      )
      (if
(<= (setq start (+ (nth 0 (last f_list)) (nth 1 (last f_list))))
    (strlen text)
)
(setq ergebniss_list
(cons (list start nil)
      ergebniss_list
)
)
      )
      (reverse ergebniss_list)
    )
    '((1 nil))
  )
)

(defun wcmatch_pos (text filter / start liste inc)
;;;  sucht alle kleinstmöglichen Teilstrings auf die der Suchfilter noch zutrifft,
;;;  gibt eine Liste mit Listen zurück die die Werte für substr enthalten
;;;  In der Rückgabeliste sind nur die Werte für die mit dem Suchfilter gefundenen Teilstrings enthalten

  (defun wcmatch_pos_work (text / liste n txt)
    (setq n (strlen text))
    (while (and (/= (substr text 1 n) "")
(wcmatch (substr text 1 n) filter)
  )
      (setq n (1- n))
    )
    (setq txt (substr text 1 (1+ n))
  n  1
    )
    (while (and (<= n (strlen text)) (wcmatch (substr txt n) filter))
      (setq n (1+ n))
    )
    (setq start (1- n)
  inc (+ inc start)
  liste (list (list inc (strlen (substr txt start))))
  inc (+ inc (1- (strlen (substr txt start))))
    )
    (if
      (and
(/= ""
    (setq
      text (substr text (+ start (strlen (substr txt start))))
    )
)
(wcmatch text filter)
      )
      (setq liste (append liste (wcmatch_pos_work text)))
    )
    liste
  )
  (setq inc 0)
  (if (wcmatch text filter)
    (progn
      (setq liste (wcmatch_pos_work text))
    )
  )
  liste
)

[Diese Nachricht wurde von Andreas Kraus am 24. Mrz. 2010 editiert.]

[Diese Nachricht wurde von Andreas Kraus am 12. Apr. 2010 editiert.]

[Diese Nachricht wurde von Andreas Kraus am 04. Mai. 2010 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Geos
Mitglied
Vermessungstechniker i.R.


Sehen Sie sich das Profil von Geos an!   Senden Sie eine Private Message an Geos  Schreiben Sie einen Gästebucheintrag für Geos

Beiträge: 1017
Registriert: 21.09.2001

ACAD Map 2010, Win 7 Pro
eigene Lisp's<P>HW: Core i7 860, 2.8 GHz
3.3 GB, NVIDIA GeForce GTS 250

erstellt am: 30. Jul. 2008 17:45    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Andreas Kraus 10 Unities + Antwort hilfreich

Danke, kann man sicher mal brauchen

------------------
Schöne Grüße
Ernst

www.geopaint.at

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz