Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  backslash in Zeichenkette

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:  backslash in Zeichenkette (760 mal gelesen)
woppi
Mitglied
cnc-programmierung


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

Beiträge: 65
Registriert: 16.01.2009

Acad Architecture 2020

erstellt am: 01. Sep. 2016 16: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 Zusammen,

bei mir Funktioniert das Taschen des "/" in "\" in einer zeichenkette nicht.
Ich weiß es ist schon viel darüber geschrieben worden, aber da ich nur gelegentlich in Lisp schreibe, verzweifle ich gerade.
Ich möchte den Hyperlink eines Objektes auslesen (klappt soweit)   und dann die Zieldatei mit dem _shell + copy Befehl kopieren.
Aber die "/" in "\" vertauscht, und ich bekomme das Umtauschen nicht auf die Reihe.
Bitte helft mir auf die Sprünge:

Hier der Code:

(defun c:Test( / Hyper Str i la str2 ) ;Hyperlink auslesen

(setq Hyper (cdr(assoc "PE_URL"(cdr(assoc -3(entget (car(entsel "\nObjekt picken:")) (list "PE_URL"))))))
      Hyper (car Hyper) ;auf ersten Eintrag reduzieren
      Hyper (cdr Hyper) ;auf rechten Teil des ersten Eintrags reduzieren
      Str (strcat "copy " Hyper " c:/lh_fmc")
     
      )

 
; kopiert aus: http://www.advanced.autolisp.info/strings2.html
; Variablen ersetzt
(setq i 1)
  (setq la(strlen "/"))
  (setq str2 "")
  (while(<= i(strlen str))
    (if
      (=(substr str i la)"/")
      (progn
        (setq str2(strcat str2 "\\"))
        (setq i(+ i la))
      )
      (progn
        (setq str2(strcat str2(substr str i 1)))
        (setq i(1+ i))
      )
    )
  )
  str2
;Ende Kopie
(command "_shell" str)
(print str)
)

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

cadffm
Moderator
良い精神




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

Beiträge: 21533
Registriert: 03.06.2002

Alles

erstellt am: 01. Sep. 2016 16:25    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 woppi 10 Unities + Antwort hilfreich

Alleine durch das lesen im Forum verstehe ich zwar nicht wiso das nötig ist,
aber ich antworte halt einfach mla nur auf dein Problem:

Auf der verlinkten Seite gibt es doch bereits eine fertige Funktion, warum nutzt du diese denn nicht?

Wenn die Funktion STR-SUBST geladen ist, dann:
(setq str (str-subst str "\\" "/"))
oder
(setq str (str-subst str "/" "\\"))

Was auch immer du haben möchtest.

------------------
CAD on demand GmbH - Beratung und Programmierung rund um AutoCAD

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

cadffm
Moderator
良い精神




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

Beiträge: 21533
Registriert: 03.06.2002

Alles

erstellt am: 01. Sep. 2016 16:37    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 woppi 10 Unities + Antwort hilfreich

Jetzt habe ich gesehen was du gemacht hast.. du hast den Inhalt der Funktion kopiert,
ohne recht zu wissen wofür das letzte "str2" gut ist.

Auch wenn es schrecklich ist, dein Code leicht geändert:
(defun c:Test( / Hyper Str i la str2 ) ;Hyperlink auslesen

(setq Hyper (cdr(assoc "PE_URL"(cdr(assoc -3(entget (car(entsel "\nObjekt picken:")) (list "PE_URL"))))))
      Hyper (car Hyper) ;auf ersten Eintrag reduzieren
      Hyper (cdr Hyper) ;auf rechten Teil des ersten Eintrags reduzieren
      Str (strcat "copy " Hyper " z:/lh_fmc")
   
      )


; kopiert aus: http://www.advanced.autolisp.info/strings2.html
; Variablen ersetzt
(setq i 1)
  (setq la(strlen "/"))
  (setq str2 "")
  (while(<= i(strlen str))
    (if
      (=(substr str i la)"/")
      (progn
        (setq str2(strcat str2 "\\"))
        (setq i(+ i la))
      )
      (progn
        (setq str2(strcat str2(substr str i 1)))
        (setq i(1+ i))
      )
    )
  )
;  str2 <== weg damit
;Ende Kopie
(alert (strcat ; Testeintrag Start
        "Hyper:  " Hyper
        "\nStr:  " Str
        "\nStr2: " Str2
)            ); Testeintrag Ende
(command "_shell" str); <== möchtest du hier nicht viel lieber der str2 haben?
(print str); <== möchtest du hier nicht viel lieber der str2 haben?
)

Da man "str-subst" aber öfters benötigt, speichert man es als Funktion, wie auf der HP,
und greift dann so darauf zu: (str-subst str neu alt)

------------------
CAD on demand GmbH - Beratung und Programmierung rund um AutoCAD

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

CADwiesel
Moderator
CAD4FM UG




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

Beiträge: 1968
Registriert: 05.09.2000

AutoCAD, Bricscad
Wir machen das Mögliche unmöglich

erstellt am: 01. Sep. 2016 16:37    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 woppi 10 Unities + Antwort hilfreich

Code:
(setq Hyper (cdr(assoc "PE_URL"(cdr(assoc -3(entget (car(entsel "\nObjekt picken:")) (list "PE_URL"))))))
      Hyper (car Hyper) ;auf ersten Eintrag reduzieren
      Hyper (cdr Hyper) ;auf rechten Teil des ersten Eintrags reduzieren
      pos 0
      )
(while(setq pos(VL-STRING-SEARCH "\\" Hyper pos))
(setq Hyper(vl-string-subst  "/" "\\" Hyper  pos))
  )
(setq Str (strcat "copy " Hyper " c:/lh_fmc"))

------------------
Gruß
CADwiesel
Besucht uns im CHAT

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

woppi
Mitglied
cnc-programmierung


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

Beiträge: 65
Registriert: 16.01.2009

Acad Architecture 2020

erstellt am: 01. Sep. 2016 16: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

Danke,
das mit dem kopieren hast Du richtig gesehen (ich hatte deswegen den Link dabei geschrieben)
Der Fehler war wirklich STR2 (ich hatte das nicht richtig gesehen)

Schöner ist natürlich die Funktion  "str-subst" kommplett zu lassen, aber das habe ich nicht ans laufen bekommen.
So klappt es jetzt, Morgen kommt der Feinschliff.

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

woppi
Mitglied
cnc-programmierung


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

Beiträge: 65
Registriert: 16.01.2009

Acad Architecture 2020

erstellt am: 01. Sep. 2016 16:59    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 CADwiesel,

die Variante funktionert bei mir leider nicht:
Fehlermeldung: Fehlerhafte Zeichenfolge für ssget-Modus

Aber der Fehler liegt wahrscheinlich bei mir, teste ich auch noch mal, aber jetzt muss ich abrechen und meine Kinder abholen,

Danke Euch Profis!!!

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

woppi
Mitglied
cnc-programmierung


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

Beiträge: 65
Registriert: 16.01.2009

Acad Architecture 2020

erstellt am: 02. Sep. 2016 08:58    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

Hat einen Moment gedauert,

natürlich funktioniert die Version von CADwiesel auch:

Hier der ganze Code:

(defun c:CF( / Hyper Str pos anz) ;Hyperlink auslesen und Zieldatei kopieren
(setq Hyper (cdr(assoc "PE_URL"(cdr(assoc -3(entget (car(entsel "\nObjekt picken:")) (list "PE_URL"))))))
      Hyper (car Hyper) ;auf ersten Eintrag reduzieren
      Hyper (cdr Hyper) ;auf rechten Teil des ersten Eintrags reduzieren
      pos 0
      )
(while(setq pos(VL-STRING-SEARCH "/" Hyper pos)) ;speichert in pos die Position von / im String
  (setq Hyper(vl-string-subst  "\\" "/" Hyper  pos)) ;tauscht / gegen \\ im String
  ) ;die Schleife wird so oft durchlaufen bis kein / mehr im String vorhanden ist.
(setq Str (strcat "copy " Hyper " c:\\lh_fmc"))
(command "_shell" str)
  )


in der Zeile setq Hyper(vl-string-subst  "\\" "/" Hyper  pos))
waren die Strings für das Ersetzen vertauscht.

So jetzt kann ich noch die Feinheiten machen, z.B. prüfen ob es die zu kopierende Datei überhaubt gibt etc...

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