Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  String Zerlegung Buchstaben/Zahlen

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
  
PNY WIRD VON NVIDIA ZUM HÄNDLER DES JAHRES GEWÄHLT, eine Pressemitteilung
Autor Thema:  String Zerlegung Buchstaben/Zahlen (2871 mal gelesen)
RSt-Stahl
Mitglied



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

Beiträge: 79
Registriert: 08.07.2005

ACAD 2006
AMD Athlon XP +4800 X2
1,5 GB Ram
500 GB HD
ATI Radeon XT1900

erstellt am: 06. Sep. 2007 11:14    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 liebes Forum,

ich suche nach einer Funktion mit der ich in Variablen gespeicherte Werte Splitten kann in "Worte" und "Zahlen". Ich habe z.B. den String "Horst2005" in einer Variablen und möchte diesen gerne aufteilen in "Horst" und in "2005". Das Problem was ich habe ist das die "Worte" unterschiedlich lang sind, ich kann also nicht immer nach dem 5 Zeichen abschneiden bzw. die ersten 5 einlesen. Gibt es eine Möglichkeit das die Strings "erkannt" werden?
Vielen Dank im Voraus.
                Thomas

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

tunnelbauer
Ehrenmitglied V.I.P. h.c.
Bauingenieur



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

Beiträge: 7085
Registriert: 13.01.2004

ich hab eh keine Probleme damit...

erstellt am: 06. Sep. 2007 11:21    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 RSt-Stahl 10 Unities + Antwort hilfreich

Ist der Rest immer gleich lang (also die Zahl) ?

------------------
Grüsse

Thomas

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

CADmium
Moderator
Maschinenbaukonstrukteur




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

Beiträge: 13529
Registriert: 30.11.2003

.

erstellt am: 06. Sep. 2007 11:26    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 RSt-Stahl 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von tunnelbauer:
Ist der Rest immer gleich lang (also die Zahl) ?


Mensch Thomas. Nur 'ne universelle Funktion, ist eine gute Funktion .. das solltest du doch nach Lektüre des Autolisp-Kochbuches wissen   

------------------
  - Thomas -
"Bei 99% aller Probleme ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben."

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

RSt-Stahl
Mitglied



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

Beiträge: 79
Registriert: 08.07.2005

ACAD 2006
AMD Athlon XP +4800 X2
1,5 GB Ram
500 GB HD
ATI Radeon XT1900

erstellt am: 06. Sep. 2007 11:28    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 Tunnelbauer,

schon mal danke für deine Antwort, nein die Zahlen sind entweder 2 oder 3 stellig! aber evtl. könnte ich vor die 2 stelligen eine "0" einfügen damit sie gleichlang wären....
Vielleicht hilft es aber, das ich im voraus weiß das es 12 verschiedene "Wörter" sein können....
  Gruß
    Thomas

[Diese Nachricht wurde von RSt-Stahl am 06. Sep. 2007 editiert.]

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

wronzky
Ehrenmitglied V.I.P. h.c.
CAD-Dienstleistungen für Architekten



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

Beiträge: 2154
Registriert: 02.05.2005

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

erstellt am: 06. Sep. 2007 11: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 Nur für RSt-Stahl 10 Unities + Antwort hilfreich

Hallo Thomas,
hab' da eine Funktion, die aus einem String ungültige Zeichen entfernt:
Code:
(defun str-delete (string letterliste / )
  (setq i 1 return "")
  (repeat (strlen string)
    (or (member (setq letter (substr string i 1)) letterliste) (setq return (strcat return letter)))
    (setq i (1+ i))
  )
  return
)
string ist der Text, letterliste die "verbotenen" Zeichen.
Z.B. (str-delete "Horst2005" '("1" "2" "3" "4" "5" "6" "7" "8" "9" "0")) -> "Horst"
vielleicht kannst Du sie ja ausbauen...

Grüsse, Henning

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

      http://www.voxelman.de

[Diese Nachricht wurde von wronzky am 06. Sep. 2007 editiert.]

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

RSt-Stahl
Mitglied



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

Beiträge: 79
Registriert: 08.07.2005

ACAD 2006
AMD Athlon XP +4800 X2
1,5 GB Ram
500 GB HD
ATI Radeon XT1900

erstellt am: 06. Sep. 2007 11:44    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 Wronzky,

vielen Dank für die Mühe! werde deine Funktion direkt mal einbauen! sieht sehr gut aus! vielen dank! Da ich wie gesagt weiß welche "Buchstaben" ich entfernen muss ist deine Funktion Ideal für meinen Zweck. Unities sind unterwegs!
    Gruß
      Thomas

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

CADmium
Moderator
Maschinenbaukonstrukteur




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

Beiträge: 13529
Registriert: 30.11.2003

.

erstellt am: 06. Sep. 2007 11:48    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 RSt-Stahl 10 Unities + Antwort hilfreich

Fürs Trennen an der Stelle, an der das erste Mal ne Ziffer auftaucht :

(defun DT:STR-DIV-SET(STRING SEPARATOR / LISTE OFFSET POS )
  (if(=(type STRING) 'STR)
    (if(and(=(type SEPARATOR) 'LIST)
          (setq SEPARATOR (vl-remove-if-not'(lambda(x)(=(type X)'Str)) SEPARATOR))
          (setq LISTE
            (vl-remove-if-not
              '(lambda(y)(numberp(car y)))
                (mapcar
                  'cons
                    (mapcar'(lambda(x)(vl-string-search x STRING))SEPARATOR)
                    SEPARATOR
                )
            )
          )
      )
    (progn
      (setq SEPARATOR (cdr(assoc (apply 'min (mapcar 'car LISTE)) LISTE)))
     
      (if(setq POS (vl-string-search SEPARATOR STRING))
          (list (substr STRING 1 POS)(substr string (1+ POS) ))
          (list STRING)
      )
    ) 
    STRING
    )
    STRING
  )
)

(DT:STR-DIV-SET "HORST2005" '("0" "1" "2" "3" "4" "5" "6" "7" "8" "9")) -> ("HORST" "2005")

------------------
  - Thomas -
"Bei 99% aller Probleme ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben."

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

fuchsi
Mitglied
Programmierer c#.net Datawarehouse


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

Beiträge: 1201
Registriert: 14.10.2003

AutoCad Version 2012 deu/enu
<P>Windows 7 64bit

erstellt am: 06. Sep. 2007 12:03    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 RSt-Stahl 10 Unities + Antwort hilfreich

Ich mache sowas immer mit Regular Expressions

(setq RegEx (vlax-create-object "vbscript.regexp"))

(vlax-put regex "Global" :vlax-true)

(vlax-put regex "Pattern" "[^a-zA-Z]")
(setq AlleBuchstaben (vlax-invoke regex "Replace" "dhuzt8n94nt934ghnxz3489zn89v8nxdz8934nz9" ""))

;-> dhuztnntghnxzznvnxdznz

(vlax-put regex "Pattern" "[^0-9]")
(setq AlleZahlen (vlax-invoke regex "Replace" "dhuzt8n94nt934ghnxz3489zn89v8nxdz8934nz9" ""))

;-> 894934348989889349

(vlax-release-object RegEx)


------------------
   
Ing. Anton Fuchs
WWW.FFZELL.AT.TC

[Diese Nachricht wurde von fuchsi am 06. Sep. 2007 editiert.]

[Diese Nachricht wurde von fuchsi am 06. Sep. 2007 editiert.]

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

RSt-Stahl
Mitglied



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

Beiträge: 79
Registriert: 08.07.2005

ACAD 2006
AMD Athlon XP +4800 X2
1,5 GB Ram
500 GB HD
ATI Radeon XT1900

erstellt am: 06. Sep. 2007 12:10    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

Vielen Dank CADmium,

wirklich toll wie schnell und kompetent man hier im Forum Antwort bekommt! Habe mir deine Funktion abgespeichert und werde sie mir später genau ansehen! Unities sind unterwegs.

Vielen Dank, Gruß
      Thomas

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

joern bosse
Ehrenmitglied
Dipl.-Ing. Vermessung


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

Beiträge: 1766
Registriert: 11.10.2004

Window 11
ACAD 2021
CIVIL 2021
BricsCAD ab V14
11th Gen Intel(R) Core(TM) i7-1165G7 @ 2.80GHz 2.80 GHz
32.0GB RAM
NVIDIA GeForce MX450<P>

erstellt am: 06. Sep. 2007 12:14    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 RSt-Stahl 10 Unities + Antwort hilfreich

Hallo,
na sowas macht doch Spaß, ich habe dafür mal "wcmatch" mit "@" und "#" verwendet:
Code:

(defun c:horst (/ string liste)
  (setq string "HORST2005")
  (setq liste (horst:string:->list string))
  (list (horst:liste:remove_if_wcmatch:->string "#" liste)
(horst:liste:remove_if_wcmatch:->string "@" liste)))

(defun horst:string:->list  (string /)
  (mapcar 'vl-list->string (mapcar 'list (vl-string->list string))))

(defun horst:liste:remove_if_wcmatch:->string  (pattern liste / A)
  (apply 'strcat
(vl-remove-if '(lambda (A) (wcmatch A pattern)) liste)))


Die Funktion trennt dann aber nicht an einer bestimmten Position, sondern Zeichen für Zeichen, z.B. HORST2005a => (HORSTa 2005)

PS: und das Kochbuch ist wirklich klasse.

------------------
viele Grüße

Jörn

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

CADmium
Moderator
Maschinenbaukonstrukteur




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

Beiträge: 13529
Registriert: 30.11.2003

.

erstellt am: 06. Sep. 2007 12:28    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 RSt-Stahl 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von fuchsi:
Ich mache sowas immer mit Regular Expressions ...

Jo, kommt auch cool.

Zitat:
Original erstellt von joern bosse:
Hallo,
na sowas macht doch Spaß, ich habe dafür mal "wcmatch" mit "@" und "#" verwendet....

.. schön, dass so viele Wege nach Rom führen ..

------------------
  - Thomas -
"Bei 99% aller Probleme ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben."

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

CADchup
Ehrenmitglied V.I.P. h.c.




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

Beiträge: 3336
Registriert: 14.03.2001

Sicher ist, dass nichts sicher ist. Selbst das nicht.
Joachim Ringelnatz

erstellt am: 06. Sep. 2007 14:08    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 RSt-Stahl 10 Unities + Antwort hilfreich

Hi,

hab' auch noch einen. vl-string-trim kommt mit den gleichen Argumenten wie wcmatch klar.

Deshalb auf die Schnelle:

Code:

(defun mx:SplitHotte (hotte / result)
    (mapcar
      '(lambda (excl)
         (setq result (cons (vl-string-trim excl hotte) result))
         )
      (list
        "[0123456789]"
        "[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ]"
        )
      )
    (reverse result)
    )

->("Hotte" "2005")

[Edit: In eine Funktion gepackt]

Gruß
CADchup

------------------
CADmaro.de

[Diese Nachricht wurde von CADchup am 06. Sep. 2007 editiert.]

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

Wolfgang S
Mitglied
CADaver


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

Beiträge: 270
Registriert: 06.03.2006

AC 2009, C3D 2009, AC 2010, C3D 2010, AC 2011, C3D 2011, RVT 2010, RVT 2011, ASD 2011 und alles darunter bis R14 +
Win XP, Win XP64, Win 7/64

erstellt am: 07. Sep. 2007 07:33    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 RSt-Stahl 10 Unities + Antwort hilfreich

... und um mit der ermittelten Zahl auch was anzufangen wär nicht schlecht ein Minus (-) oder ein Komma "." oder Tausender-Trennzeichen "," davor/dazwischen zu erkennen.
Wobei ja "-" "." "," als Text wieder nicht Teil eines Pattern wie z.B. "[^0-9]" wäre.

hab die funktionen nicht durchprobiert, aber es scheint bis jetzt so, daß es nicht darum geht die Zahl weiterzuverwenden sondern den Text zu säubern!
das Ziel der Aktion war aus dem Originalpost aber nicht abzuleiten.


Bleibt dann bei Texttrennung von "FBOK=-0.13" übrig "FBOK=-."
(soweit ich die Funktionen durchüberlegt habe, wie gesagt)

ein grübelnder
Wolfgang S


[Diese Nachricht wurde von Wolfgang S am 07. Sep. 2007 editiert.]

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

RSt-Stahl
Mitglied



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

Beiträge: 79
Registriert: 08.07.2005

ACAD 2006
AMD Athlon XP +4800 X2
1,5 GB Ram
500 GB HD
ATI Radeon XT1900

erstellt am: 07. Sep. 2007 10:14    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 und Danke noch mal an alle die eine Lösung parat hatten. Ich werde mir alle Vorschläge noch mal in Ruhe anschauen.
@Wolfgang S.
Es werden sowohl Text als auch Zahl weiterverarbeitet. Das ganze wird eine "Profil" Erkennung. Beim zeichnen von Profilen werden die Daten via XDaten angehangen (z.B. IPE80)  und nachher bei der Weiterverarbeitung wird der Profilname und die Größe wieder ausgelesen! Ebenso der Maßstab des Profils. So kann ich gezielt Informationen über das Profil erhalten ohne das ich jedes Mal angeben muss um welches Profil es sich handelt, erspart dem Nutzer (mir) eine menge an unnötiger Angaben. Auf diese Weise werden nachher „DAST“-Platten bzw. Stahlbaurippen  passgenau eingefügt. Klappt schon ganz gut das ganze.
Außerdem kann man die Funktion so „einstellen“ das aus „FBOK=0.13“ nur „FBOK“ und „0.13“ übrig bleiben! 
Gruß
    Thomas

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

Wolfgang S
Mitglied
CADaver


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

Beiträge: 270
Registriert: 06.03.2006

AC 2009, C3D 2009, AC 2010, C3D 2010, AC 2011, C3D 2011, RVT 2010, RVT 2011, ASD 2011 und alles darunter bis R14 +
Win XP, Win XP64, Win 7/64

erstellt am: 07. Sep. 2007 11:08    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 RSt-Stahl 10 Unities + Antwort hilfreich

Hallo!

hab mal was überlegt, das zerteilt die Strings in Zahlen, ist aber nicht fertig.
Vor allem die rekursive Rückgabe der richtigen Werte passt noch nicht. Aber die Aufteilung der Zahlen passt schon!


Code:
(defun text2zahl (String / stringlist restlist TMP_LIST ZAHLENLIST idx)
  (if (= (type string) 'STR)
    (setq stringlist (vl-string->list String))
    (setq stringlist string)
  )
  (setq restlist  stringlist
        zahlenlist (vl-string->list "1234567890+-.,")
  )

  (setq idx 0)
 
  (while (member (nth IDX stringlist) zahlenlist)
                        (setq tmp_list (append tmp_list (list (nth IDX stringlist)))
                              restlist (cdr restlist)
                              idx (1+ idx)
                        )                                                     
    );end_while   
  (list (vl-list->string tmp_list)(if (cdr restlist) (text2zahl (cdr restlist))  ))
)


Bsp:
(text2zahl "FBOK=-0.26 -123,513.50 +67") ergibt:

("" ("" ("" ("" ("" ("-0.26" ("-123,513.50" ("+67" nil))))))))

(wie gesagt, die Rückgabe is nicht ok)

lg
Wolfgang S

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

joern bosse
Ehrenmitglied
Dipl.-Ing. Vermessung


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

Beiträge: 1766
Registriert: 11.10.2004

Window 11
ACAD 2021
CIVIL 2021
BricsCAD ab V14
11th Gen Intel(R) Core(TM) i7-1165G7 @ 2.80GHz 2.80 GHz
32.0GB RAM
NVIDIA GeForce MX450<P>

erstellt am: 07. Sep. 2007 12:55    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 RSt-Stahl 10 Unities + Antwort hilfreich

Hallo Wolfgang,
ich habe Deine Version nochmal anders geschrieben, ohne Rekursion, dafür mit 3x "while"

Code:

(defun text2zahl (String / LISTE RESTLIST TEMP ZAHLENLIST )
 
 
  (setq restlist  (vl-string->list string)
        zahlenlist (vl-string->list "1234567890+-.,"))

  (while restlist
   
    (while (not(member(car restlist)zahlenlist))
      (setq restlist (cdr restlist)))
   
    (while (member (car restlist)zahlenlist)
      (setq temp (cons (car restlist)temp)
    restlist (cdr restlist)))
   
    (if temp (setq liste (cons (vl-list->string(reverse temp))liste)
  temp nil)))
  (reverse liste))

------------------
viele Grüße

Jörn

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

Wolfgang S
Mitglied
CADaver


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

Beiträge: 270
Registriert: 06.03.2006

AC 2009, C3D 2009, AC 2010, C3D 2010, AC 2011, C3D 2011, RVT 2010, RVT 2011, ASD 2011 und alles darunter bis R14 +
Win XP, Win XP64, Win 7/64

erstellt am: 07. Sep. 2007 13:05    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 RSt-Stahl 10 Unities + Antwort hilfreich

*hehe*
jo, geile Funktion.
und viel einfacher als meine rekursion!

uuuuuuuund ist schon aufgehoben!

thx
Wolfgang S

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

Wolfgang S
Mitglied
CADaver


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

Beiträge: 270
Registriert: 06.03.2006

AC 2009, C3D 2009, AC 2010, C3D 2010, AC 2011, C3D 2011, RVT 2010, RVT 2011, ASD 2011 und alles darunter bis R14 +
Win XP, Win XP64, Win 7/64

erstellt am: 08. Sep. 2007 21:40    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 RSt-Stahl 10 Unities + Antwort hilfreich

Code:

;;;    ____________________________________________________________   
;;;  |                                                             
;;;  |  - Zerlegen von Textstrings in vorkommende Zahlenwerte     
;;;  |____________________________________________________________ 
;;;  |                                                             
;;;  |    Aufruf:  (text2zahl [String] [FLAG])                     
;;;  |                                                             
;;;  |    Eingangswerte: Textstring zum Zerlegen                   
;;;  |                    Flag T -> Komma wird als Trennung         
;;;  |                              zwischen Zahlen angesehen       
;;;  |                        NIL -> Komma als Tausendertrennung   
;;;  |                                                             
;;;  |    Ausgangswerte: Liste mit allen vorkommenden Zahlen       
;;;  |                                                             
;;;  |    Beispiel:                                               
;;;  |    (text2zahl "ASDF 130,232.54564656 -25" T) liefert:       
;;;  |      -> (130233.0 -25)                                       
;;;  |    (text2zahl "ASDF 130,232.54564656 -25" nil) liefert:     
;;;  |      -> (130 232.546 -25)                                   
;;;  |                                                             
;;;  |  - Wolfgang Sünder                                         
;;;  |  - Version 1.0                                             
;;;  |  - Sept 2007                                               
;;;  |                                                             
;;;  |____________________________________________________________ 
;;;                                                                   

(defun text2zahl (String KOMMAFlAG / LISTE RESTLIST TEMP ZAHLENLIST)
  (setq restlist  (vl-string->list string)
zahlenlist (append (vl-string->list "1234567890+-.")
  (if KOMMAFLAG
    (vl-string->list ",")
  )
  )
  )
  (while restlist
    (while (not (member (car restlist) zahlenlist))
      (setq restlist (cdr restlist))
    )
    (while (member (car restlist) zahlenlist)
      (setq temp    (cons (car restlist) temp)
    restlist (cdr restlist)
      )
    )
    (if temp
      (setq liste (cons
    (if KOMMAFLAG
      (vl-string-subst
""
","
(vl-list->string (reverse temp))
      )
      (vl-list->string (reverse temp))
    )
    liste
  )
    temp  nil
      )
    )
  )
  (mapcar 'read
  (reverse liste)
  )
;;;mit read in Zahlen umwandeln, Int oder Real wird von read selektiert
)



hier das Endergebnis. mit Flag für Kommaunterscheidung,
und danke allen Beteiligten für die Unterstützung

Wolfgang S

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)2024 CAD.de | Impressum | Datenschutz