Hot News aus dem CAD.de-Newsletter:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  klammern in strings zählen bzw. vervollständigen?

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
Autor Thema:   klammern in strings zählen bzw. vervollständigen? (559 mal gelesen)
Schachinger
Ehrenmitglied V.I.P. h.c.
Konstrukteur



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

Beiträge: 2001
Registriert: 08.04.2002

erstellt am: 18. Sep. 2003 10:24    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 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




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

Beiträge: 4051
Registriert: 17.05.2001

AutoCAD 20XX, defun-tools (d-tools.eu)

erstellt am: 18. Sep. 2003 11:47    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 Schachinger 10 Unities + Antwort hilfreich

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



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

Beiträge: 2001
Registriert: 08.04.2002

erstellt am: 18. Sep. 2003 13:22    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

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



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

Beiträge: 2001
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 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

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


Ex-Mitglied

erstellt am: 19. Aug. 2004 18:55    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

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

------------------


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)2018 CAD.de