| |
 | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
 | NVIDIA GTC Paris und ISC High Performance-Konferenz 2025, eine Pressemitteilung
|
Autor
|
Thema: klammern in strings zählen bzw. vervollständigen? (700 mal gelesen)
|
Schachinger Ehrenmitglied V.I.P. h.c. Konstrukteur

 Beiträge: 2042 Registriert: 08.04.2002
|
erstellt am: 18. Sep. 2003 10:24 <-- editieren / zitieren --> Unities abgeben:         
hallo forum! wieder mal stoß ich mit meinen lisp-(un)wissen auf eine mauer. folgendes problem: ich lese von einer anderen (nicht auf meinem bescheidenen mist gewachsenen  ) applikation xdata-werte die dieses in einzelne objekte schreibt aus. funkt noch alles wunderbar. der für mich wichtige teil sieht z.b. so aus: (1000 . "(\"5.0b\" \"0006C7\" \"ROHR\" \"EDELST.DAT\" nil (((-1.0 0.0 0.0) (0.0 0.0 0.0) \"DN100\") ((1.0 0.0 0.0) (0.0 0.0 0.0) \"DN100\")) 39.4888)"))) das problem ist das bei manchen 1000er-einträgen die für xdata minimierten 255-zeichen überschritten werden. dadruch sind die geöffneten klammern nicht mehr gleich mit der anzahl der geschlossenen klammern - ich will das ganze aber weiterhin als liste haben. wie kann ich am leichtesten überprüfen wieviele "(" und ")" im string enthalten sind? oder muss ich mit "substr" alle positionen einzeln abfragen - was ja auch geht aber in summe und durch die verschachtelung in der diese abfrage erfolgt für einiges an rechenzeit sorgen würde. ich weis für einen lispprofi ist die frage ganz einfach mit ja oder nein es geht nicht einfacher zu beantworten. bin halt nur leie. danke für eure hilfe! ------------------ mfg Siegfried Schachinger http://www.tbschatz.at Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Brischke Moderator CAD on demand GmbH
       

 Beiträge: 4201 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools (d-tools.eu)
|
erstellt am: 18. Sep. 2003 11:47 <-- editieren / zitieren --> Unities abgeben:          Nur für Schachinger
Hallo Siegfried, folgende Zeilen zerlegen dir jeden String in eine Liste von einzelnen Zeichen.
Code:
(defun f:str-in-list (sil_str / sil_i sil_strli) (setq sil_i 0) (if (= 'STR (type sil_str)) (reverse (while (< sil_i (strlen sil_str)) (setq sil_i (1+ sil_i) sil_strli (cons (substr sil_str sil_i 1) sil_strli) ) ) ) ) )
Mit dem Ergebnis kannst du nun ganz problemlos mit (cdr (member "(" ERG_LISTE)) zählen heraus suchen, wie oft welches Zeichen in der Zeichenkette vorhanden sind. Bei Fragen... Grüße Holger ------------------ Holger Brischke CADlon - Lisp over night! 10, 9, 8, 7, 6 - Der Countdown läuft. Wofür?... ./. Ich bin vom 07.-10.10. in Stuttgart dabei. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Schachinger Ehrenmitglied V.I.P. h.c. Konstrukteur

 Beiträge: 2042 Registriert: 08.04.2002
|
erstellt am: 18. Sep. 2003 13:22 <-- editieren / zitieren --> Unities abgeben:         
danke funktioniert wunderbar  mit: /"en" ist das zu testende string" (setq kla-auf 0) (setq en1 (f:str-in-list en)) (while (cdr (member "(" en1)) (setq en1 (cdr (member "(" en1))) (setq kla-auf (1+ kla-auf))) (if (= (last en1) "(") (setq kla-auf (1+ kla-auf))) bekomm ich dann die Klammer-auf-anzahl  1000 DANK!!
------------------ mfg Siegfried Schachinger http://www.tbschatz.at Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Schachinger Ehrenmitglied V.I.P. h.c. Konstrukteur

 Beiträge: 2042 Registriert: 08.04.2002 AIS2009, PDSU 2012-2015, Plant 3D 2011-2015, NavisWorks 2010-2015, Win7 64bit SP1, Intel Core i7 870, 16 GB RAM, Quadro 2000D
|
erstellt am: 19. Aug. 2004 13:08 <-- editieren / zitieren --> Unities abgeben:         
bin grade dabei meine alten lispcodes zu überarbeiten - dabei hab ich auch gemerkt das mein "klammernproblem" eigendlich ganz simpel zu lösen ist. wieder - "EN" ist der mit ")" zu vervollständigende string: Code:
(repeat (- (length (vl-remove (ascii ")") (vl-string->list en))) (length (vl-remove (ascii "(") (vl-string->list en))) ) (setq en (strcat en ")")) )
vielleicht kanns ja jemand brauchen  ------------------ mfg Siegfried Schachinger http://www.tbschatz.at Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |

| Anzeige: | Infos zum Werbeplatz >> | CADPower CAD APP für Allgemeine Werkzeuge CADPower is a pure-productivity tool for the .dwg CAD user.
It provides you with over 400+ Lisp routines and tools that you always wanted but found missing. It is designed to super-charge and boost productivity for just any AutoCAD/BricsCAD/ZWCAD/ARES Commander user.
|
|
Ex-Mitglied
|
erstellt am: 19. Aug. 2004 18:55 <-- editieren / zitieren -->
Zitat: Original erstellt von Brischke:
folgende Zeilen zerlegen dir jeden String in eine Liste von einzelnen Zeichen [...]
... weil ich heute meinen genialen Tag hab' kommt hier gleich die ultimative Zähl-Funktion dafür: Code:
(defun how-often (tok lst / remainder) (if (not (setq remainder (member tok lst))) 0 (1+ (how-often tok (cdr remainder))) ) )
Gruß Tom Berger ------------------
|