Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  Listen exportieren

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:  Listen exportieren (1837 mal gelesen)
mkl-cad
Mitglied
Technischer Zeichner


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

Beiträge: 378
Registriert: 23.07.2003

ACAD 2002
Express Tools 1-9
Architektural Desktop
Windows XP
Server Windows 2003
3 GHz Rechner
1 GB RAM
80 GB Festplatte
ATI FireGL V3100
2 17" Flachbildschirme

erstellt am: 04. Feb. 2004 12: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

Hallo an alle.

Man kann ja bekanntlich Daten in eine externe Datei abspeichern:

(setq dat (open "c:\\test.DAT" "w")) ....

Wenn diese wieder gelesen werden, werden diese als Texte erkannt:

(setq dat (open "c:\\test.DAT" "r"))
(setq P (read-line dat))

z.B P= "Text" oder "1"

Gibt es nun noch eine andere Möglichkeit Listen abzuspeichern ohne jeden einzelnen Listenposten in eine separate Zeile zu schreiben. Wenn man eine komplette Liste abspeichert entsteht sowas:

(setq dat (open "c:\\test.DAT" "w"))
(setq h (list "test1" "test2"))
(princ h dat)
(close dat)
(setq dat (open "c:\\test.DAT" "r"))
(setq P (read-line dat))
(close dat)

Ergebnis: P= "(test1 test2)" anstatt p= ("test1" "test2")

Ich weiß das es mit den einzelnen abspeichern auch klappt und auch relativ einfach geht. Dachte nur da gibts vielleicht was besseres.

Martin

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: 4171
Registriert: 17.05.2001

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

erstellt am: 04. Feb. 2004 12:31    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 mkl-cad 10 Unities + Antwort hilfreich

Hi Martin,

das geht, und ich nutze diese Form hauptsächlich um Daten rauszuschreiben, die ich irgendwann wieder im LISP brauche.
Ist auch ganz einfach:
Du schreibst den LISP-Ausdruck mit write-line in die ASCII-Datei. Die kann irgendweine Dateierweiterung haben.
Mit (setq dateiinhalt (load "beispiel.bsp"))
bekommst du direkt die List ohne umständlich mit read-line arbeiten zu müssen.
Der Inhalt der beispiel.bsp könnte dann in etwa so aussehen:
'(;Achtung das ' (Quote-Zeichen) nicht vergessen
("WERT_1" . "Hallo")
("WERT_2" . "Du")
("WERT_3" . "da!")
)
Anwendung:
(setq dateiinhalt (load "beispiel.bsp"))
(princ (mapcar 'cdr dateiinhalt))
;oder
(setq wert1 (cdr(assoc "WERT_1" dateiinhalt)))

Bei Fragen ...

Grüße Holger

------------------
Holger Brischke
(defun - Lisp over night!
AutoLISP-Programmierung für AutoCAD
Da weiß man, wann man's hat!

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

Speedcad
Mitglied



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

Beiträge: 76
Registriert: 17.01.2004

erstellt am: 04. Feb. 2004 12:42    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 mkl-cad 10 Unities + Antwort hilfreich

(setq dat (open "c:\\test.DAT" "w"))
(setq h (list "test1" "test2"))
(princ h dat)
(close dat)
(setq dat (open "c:\\test.DAT" "r"))
(setq P (read (read-line dat)))
(close dat)

so geht's bestimmt

Gruß Speedcad

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

mkl-cad
Mitglied
Technischer Zeichner


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

Beiträge: 378
Registriert: 23.07.2003

ACAD 2002
Express Tools 1-9
Architektural Desktop
Windows XP
Server Windows 2003
3 GHz Rechner
1 GB RAM
80 GB Festplatte
ATI FireGL V3100
2 17" Flachbildschirme

erstellt am: 04. Feb. 2004 13: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

An Brischke:

Mit write-line schreiben?

(setq h (list "test1" "test2"))
(write-line h dat)
; Fehler: Fehlerhafter Argumenttyp: stringp ("test1" "test2")

An Speedcad:

Ergebnis ist (test1 test2) nicht ("test1" "test2")


Martin


[Diese Nachricht wurde von mkl-cad am 04. Feb. 2004 editiert.]

[Diese Nachricht wurde von mkl-cad am 04. Feb. 2004 editiert.]

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: 4171
Registriert: 17.05.2001

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

erstellt am: 04. Feb. 2004 14: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 Nur für mkl-cad 10 Unities + Antwort hilfreich

Hallo Martin,

du musst alles in die Datei schreiben auch die Klammern und das Quote!
entweder mit (princ ..)
(setq wert1 "TEST1")
(setq wert2 "TEST2")
(princ "'(" dat)
(princ
(if (= 'STR (type wert))
(strcat "\""wert1 "\"")
wert) dat)
(princ " " dat)
(princ
(if (= 'STR (type wert))
(strcat "\""wert2 "\"")
wert) dat)
(princ ")" dat)

oder mit (write-line ..), was dann aber nur mit Strings funktioniert.
(write-line (strcat "'(\"" wert1 "\" \"" wert2 "\")") dat)

Ich finde es mit (princ..) praktischer, weil du dann nicht alle möglichen Umwandlungen in einen String machen musst. Nur eben dem String die "" mitgeben.

Bei Fragen ...

Grüße Holger

------------------
Holger Brischke
(defun - Lisp over night!
AutoLISP-Programmierung für AutoCAD
Da weiß man, wann man's hat!

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

mkl-cad
Mitglied
Technischer Zeichner


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

Beiträge: 378
Registriert: 23.07.2003

ACAD 2002
Express Tools 1-9
Architektural Desktop
Windows XP
Server Windows 2003
3 GHz Rechner
1 GB RAM
80 GB Festplatte
ATI FireGL V3100
2 17" Flachbildschirme

erstellt am: 04. Feb. 2004 14:51    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 für die Antwort

Aber da bleib ich lieber bei meiner bisherigen Methode jeden Wert der Liste mittels einer Schleife in die Datei zu schreiben und beim lesen mittels einer Schleife wieder zu einer Liste zusammen zu fügen. Ich brauche wenn dann sowieso die ganze Liste und nicht nur einzelne Werte daraus. Dann würde ich Ihre Methode beforzugen.

Martin

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: 4171
Registriert: 17.05.2001

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

erstellt am: 04. Feb. 2004 15: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 mkl-cad 10 Unities + Antwort hilfreich

Hi Martin,

ich möchte dir jetzt nicht meine Methode aufdrücken, aber zeigen wie einfach es eigentlich ist. Deswegen ein Beispiel:

Code:

(defun c:xxx (/ w1 w2 w3 inDateiListe meineListeAusDatei)
  (setq w1 1
        w2 1.1
        w3 "Hallo"
        inDateiListe (list w1 w2 w3)
        )
  ;;Daten wegschreiben
  (w:list->File "c:\\datei.txt" inDateiListe)
  ;und wieder Laden
  (setq meineListeAusDatei (load "c:\\datei.txt"))
  )
(defun w:list->File (datei WerteListe / f)
  (setq f (open datei "w"))
  (princ "'(" f)
  (mapcar '(lambda (W)
             (princ
               (if (= 'STR (type W))
                 (strcat "\"" W "\"")
                 W)
               f
               )
             (princ " " f)
             )
          WerteListe
          )
  (princ ")" f)
  (close f)
  )

Bei Fragen ...

Grüße Holger

------------------
Holger Brischke
(defun - Lisp over night!
AutoLISP-Programmierung für AutoCAD
Da weiß man, wann man's hat!

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

mkl-cad
Mitglied
Technischer Zeichner


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

Beiträge: 378
Registriert: 23.07.2003

ACAD 2002
Express Tools 1-9
Architektural Desktop
Windows XP
Server Windows 2003
3 GHz Rechner
1 GB RAM
80 GB Festplatte
ATI FireGL V3100
2 17" Flachbildschirme

erstellt am: 04. Feb. 2004 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

Boh, anscheinend bin ich doch noch nicht so gut mit dem programmieren. Wenn jetzt noch ein Beispiel käme mit dem ich mehrere Listen abspeichern kann währe ich geplättet.

Martin

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: 4171
Registriert: 17.05.2001

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

erstellt am: 04. Feb. 2004 16:42    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 mkl-cad 10 Unities + Antwort hilfreich

Was heißt jetzt mehrere Listen?
Wie sollen die aufgebaut sein?

Grüße Holger

------------------
Holger Brischke
(defun - Lisp over night!
AutoLISP-Programmierung für AutoCAD
Da weiß man, wann man's hat!

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

marc.scherer
Ehrenmitglied V.I.P. h.c.
CAD-Administrator



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

Beiträge: 2490
Registriert: 02.11.2001

Windows 10 64bit
AutoCAD Architecture 2018/2019 (deu/eng)
AEC-Collection 2019 (Revit und Zeugs)
Wenn sich's nicht vermeiden läßt:
D-A-CH Erweiterung (mies implementierter Schrott)

erstellt am: 05. Feb. 2004 09:46    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 mkl-cad 10 Unities + Antwort hilfreich

Hi,
versuch's mal hiermit.
Ich denke prin1 ist der Schlüssel:
Code:

;;; List = Liste die in File geschreiben werden soll
;;; FULLPATHNAME = Sagt der Name schon...
;;; Beispiel: (LST->FILE (list "Hallo" "Welt" "Test" "1" 2 3 4) "C:\\Temp\\Test.txt")
(defun LST->FILE (LST FULLPATHNAME / FDESC)
  (setq FDESC (open FULLPATHNAME "w"))
  (prin1 LST FDESC)
  (close FDESC)
  lst
) ;_ end of defun

;;; FULLPATHNAME = Sagt der Name schon...
;;; Beispiel: (LST-FILE->LST "C:\\Temp\\Test.txt")
(defun LST-FILE->LST (FULLPATHNAME / FDESC LINE)
  (if (findfile FULLPATHNAME)
    (progn
      (setq FDESC (open FULLPATHNAME "r")
            LINE  (read (read-line FDESC))
      ) ;_ end of setq
      (close FDESC)
    ) ;_ end of progn
  ) ;_ end of if
  LINE
) ;_ end of defun

(defun C:TEST ()
  (setq A (LST->FILE (list "Hallo" "Welt" "Test" "1" 2 3 4)
                    "C:\\Temp\\Test.txt"
          ) ;_ end of LST->FILE
        B (LST-FILE->LST "C:\\Temp\\Test.txt")
  ) ;_ end of setq
  (equal A B)
) ;_ end of defun


..

------------------
Ciao,
Marc

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: 4171
Registriert: 17.05.2001

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

erstellt am: 05. Feb. 2004 10:43    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 mkl-cad 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von marc.scherer:
Hi,
versuch's mal hiermit.
Ich denke prin1 ist der Schlüssel:
...


Hallo,

(prin1..) hatte ich bisher noch keine Beachtung geschenkt. Ändert sich aber im Moment.
Damit ist dann auch die Frage geklärt, wie man mehrere Listen in eine Datei schreibt.

Grüße Holger

------------------
Holger Brischke
(defun - Lisp over night!
AutoLISP-Programmierung für AutoCAD
Da weiß man, wann man's hat!

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

mkl-cad
Mitglied
Technischer Zeichner


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

Beiträge: 378
Registriert: 23.07.2003

ACAD 2002
Express Tools 1-9
Architektural Desktop
Windows XP
Server Windows 2003
3 GHz Rechner
1 GB RAM
80 GB Festplatte
ATI FireGL V3100
2 17" Flachbildschirme

erstellt am: 05. Feb. 2004 14:00    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

Das mit den mehreren Listen hatte ich mir ein bischen anders gedacht.
Aber mit der guten Vorgabe konnte ich es hinkriegen:

(defun LST->FILE (FULLPATHNAME LST LST2 LST3  / FDESC)
  (setq FDESC (open FULLPATHNAME "w"))
  (prin1 LST FDESC)
  (princ "\n" FDESC)(prin1 lst2 FDESC)
  (princ "\n" FDESC)(prin1 lst3 FDESC)
  (close FDESC)
  lst lst2 lst3
) ;_ end of defun


(defun LST-FILE->LST (FULLPATHNAME / FDESC )
  (if (findfile FULLPATHNAME)
    (progn
      (setq FDESC (open FULLPATHNAME "r")
    LINE  (read (read-line FDESC))
            LINE2  (read (read-line FDESC))
            LINE3  (read (read-line FDESC))
      ) ;_ end of setq
      (close FDESC)
    ) ;_ end of progn
  ) ;_ end of if
) ;_ end of defun

(defun C:TEST ( / LINE LINE2 LINE3)
  (LST->FILE  "C:\\Temp\\Test.txt"
            (list "Hallo" "Welt" "Test" "1" 2 3 4)
            (list "Hallo2" "Welt2" "Test2" "1a" 5 6 7)
                    (list "Hallo3" "Welt3" "Test3" "2a" 5 6 7)
          ) ;_ end of LST->FILE   
  (LST-FILE->LST "C:\\Temp\\Test.txt")
  ;!!! Listen befinden sich nun in LINE LINE2 und LINE3

) ;_ end of defun

Nun sind drei Listen in einer Datei gespeichert.

Vielen Dank an alle

Martin

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

marc.scherer
Ehrenmitglied V.I.P. h.c.
CAD-Administrator



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

Beiträge: 2490
Registriert: 02.11.2001

Windows 10 64bit
AutoCAD Architecture 2018/2019 (deu/eng)
AEC-Collection 2019 (Revit und Zeugs)
Wenn sich's nicht vermeiden läßt:
D-A-CH Erweiterung (mies implementierter Schrott)

erstellt am: 05. Feb. 2004 14: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 mkl-cad 10 Unities + Antwort hilfreich

Hi mkl-cad,
das ist doch Hühnerkacke :-).
Dann schreib das gleich so, das die Anzahl der Listen egal ist:
Code:

;;; FULLPATHNAME = Sagt der Name schon...
;;; LST = Listen die in File geschrieben werden sollen
;;; Beispiel: (LST->FILE "C:\\Temp\\Test.txt" (list '("Hallo" "Welt" "Test")'("1" 2 3 4)))
(defun LST->FILE (FULLPATHNAME LST / FDESC)
  (setq FDESC (open FULLPATHNAME "w"))
  (foreach ELEM LST
    (prin1 ELEM FDESC)
    (princ "\n" FDESC)
  ) ;_ end of foreach
  (close FDESC)
  LST
) ;_ end of defun

;;; FULLPATHNAME = Sagt der Name schon...
;;; Beispiel: (LST-FILE->LST "C:\\Temp\\Test.txt")
(defun LST-FILE->LST (FULLPATHNAME / FDESC LINE RETVAL ZEILE)
  (if (findfile FULLPATHNAME)
    (progn
      (setq FDESC (open FULLPATHNAME "r"))
      (while (setq zeile (read-line FDESC))
        (setq LINE  (read ZEILE)
              RETVAL (cons LINE RETVAL)
        ) ;_ end of setq
      )
      (setq retval (reverse retval))
      (close FDESC)
    ) ;_ end of progn
  ) ;_ end of if
  retval
) ;_ end of defun

(defun C:TEST (/ LINE LINE2 LINE3)
  (equal
    (LST->FILE "C:\\Temp\\Test.txt" (list (list "Hallo" "Welt" "Test" "1" 2 3 4)
                    (list "Hallo2" "Welt2" "Test2" "1a" 5 6 7)
                    (list "Hallo3" "Welt3" "Test3" "2a" 5 6 7)
              ) ;_ end of list
    ) ;_ end of LST->FILE   
    (LST-FILE->LST "C:\\Temp\\Test.txt")
  ) ;_ end of equal
) ;_ end of defun



..

------------------
Ciao,
Marc

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: 05. Feb. 2004 14:29    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 mkl-cad 10 Unities + Antwort hilfreich

wieso so kompliziert
seit Visual-Lisp alles viel easier

_$ (vl-princ-to-string (list "test" 6 7 ))
"(test 6 7)"
_$ (vl-prin1-to-string (list "test" 6 7 ))
"(\"test\" 6 7)"
_$

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

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

mkl-cad
Mitglied
Technischer Zeichner


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

Beiträge: 378
Registriert: 23.07.2003

ACAD 2002
Express Tools 1-9
Architektural Desktop
Windows XP
Server Windows 2003
3 GHz Rechner
1 GB RAM
80 GB Festplatte
ATI FireGL V3100
2 17" Flachbildschirme

erstellt am: 05. Feb. 2004 14:36    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 Marc

hast ja recht. Wollte ich auch eigentlich. Hatte so auf die schnelle aber nicht die richtige Idee. Aus Listen erst mal ne Liste machen, darauf kam ich nicht. Das wollte ich demnächst noch ändern. Aber danke für die Arbeit.

Martin

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

mapcar
Mitglied
CADmin



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

Beiträge: 1250
Registriert: 20.05.2002

Time flies like an arrow, fruit flies like a banana (Groucho Marx)

erstellt am: 19. Feb. 2004 13:18    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 mkl-cad 10 Unities + Antwort hilfreich

Dieser Thread ist zwar schon zwei Wochen alt, aber ich kann's einfach nicht so stehen lassen. Es wurde zwar nicht an Steuerzeichen und Oktalwerte gedacht, aber der Ansatz mit prin1 ist schon richtig! Es geht aber doch alles viel einfacher:

Ein kleine Test-Liste:

Code:

(setq testliste
'(1 (2 . 3)"test"
    (4 "test\n mit\n cr") 5
    "string mit \"quotes\" und \261 \274\ drin"
  )
)


Schreiben wir das mit princ in die Datei, geht's in die Hose:
Code:

(princ testliste file) =>
  1(2 . 3)test(4 nochntest)5string mit "quotes" und ± ¼ drin


Mit prin1 sieht das schon viel freundlicher aus:
Code:

(prin1 item fh) =>
1(2 . 3)"test"(4 "test\n mit\n cr")5"string mit \"quotes\" und ± ¼ drin"


Da fehlen aber noch die Klammern drum - und dafür brauchen wir princ! Deshalb sieht die erste Grund-Routine so aus:
Code:

(defun list>file1(lst filename / fh)
  (if(setq fh(open filename "w"))
    (progn
      (princ "(" fh)
      (foreach item lst
        (prin1 item fh)
      )
      (princ ")" fh)
      (close fh)
    )
  )
)

(list>file1 testliste "c:/autolisp/testliste.lsp") =>
(1(2 . 3)"test"(4 "test\n mit\n cr")5"string mit \"quotes\" und ± ¼ drin")



Das kann man so weiterverwenden und wieder einlesen! Jetzt sollen aber mehrere Listen in eine Datei geschrieben werden - also muss das Symbol mitsamt der Bindung verarbeitet werden. Die Routine wird abgeändert:
Code:

(defun list>file2(sym filename / fh)
  (if(setq fh(open filename "w"))
    (progn
      (princ "(setq " fh)
      (princ sym fh)
      (foreach item(cons'quote(list(eval sym))
        (prin1 item fh)
      )
      (princ "))" fh)
      (close fh)
    )
    (princ"Datei konnte nicht geöffnet werden!\n")
  )
)


Beim Aufruf muss der Name der Liste gequotet werden:
Code:

(list>file2 'testlist "c:/autolisp/fstest.lsp") =>
(setq TESTLIST(QUOTE (1 (2 . 3) "test" (4 "test\n mit\n cr") 5 "string mit \"quotes\" und ± ¼ drin")))


Um eine Funktion zum Wiedereinlesen brauchen wir uns keine Gedanken machen - da verwenden wir einfach LOAD!!!
Code:

(load "c:/autolisp/fstest.lsp")


Und jetzt auch noch mehrere Listen auf einmal:
Code:

(defun lists>file(symlist filename / fh)
  (if(setq fh(open filename "w"))
    (progn
      (foreach sym symlist
        (princ "(setq " fh)
        (princ sym fh)
        (foreach item(list(cons'quote(list(eval sym))))
          (prin1 item fh)
        )
        (princ ")" fh)
      )
      (close fh)
    )
    (princ"Datei konnte nicht geöffnet werden!\n")
  )
)


Mir persönlich gefällt dann diese Kombination am Besten:
Code:

;;; Endgültige Fassung, alles andere waren nur Vorüberlegungen!

(defun list>file(symlist filename / fh)
  (if(setq fh(open filename "w"))
    (progn
      (foreach sym(if(listp symlist)symlist(list symlist))
        (princ "(setq " fh)
        (princ sym fh)
        (foreach item(list(cons'quote(list(eval sym))))
          (prin1 item fh)
        )
        (princ ")" fh)
      )
      (close fh)
    )
    (princ"Datei konnte nicht geöffnet werden!\n")
  )
)

;;; Ende der endgültigen Fassung



Das kann man so aufrufen:
Code:

(list>file 'liste1 "datei1.lsp")


oder auch so:
Code:

(list>file '(liste1 liste2) "datei1.lsp")


Ein einziges LOAD genügt zum Wiederherstellen der Liste(n)!

Gruß, Axel

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

Meine AutoLisp-Seiten
Meine private Homepage
Mein Angriff auf dein Zwerchfell
Mein Lexikon der Fotografie
Mein gereimtes Gesülze
Meine Überzeugung...

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

mkl-cad
Mitglied
Technischer Zeichner


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

Beiträge: 378
Registriert: 23.07.2003

ACAD 2002
Express Tools 1-9
Architektural Desktop
Windows XP
Server Windows 2003
3 GHz Rechner
1 GB RAM
80 GB Festplatte
ATI FireGL V3100
2 17" Flachbildschirme

erstellt am: 11. Feb. 2005 08:27    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

Ganz große Klasse !

So finde ich es noch schöner. Die Datei ist dann übersichtlicher. Erst recht bei immer gleichen Listenaufbauten.

(defun list>file(symlist filename / fh)
  (if(setq fh(open filename "w"))
    (progn
      (foreach sym(if(listp symlist)symlist(list symlist))
        (princ "\n(setq " fh)
        (princ sym fh)
        (foreach item(list(cons'quote(list(eval sym))))
          (prin1 item fh)
        )
        (princ ")" fh)
      )
      (close fh)
    )
    (princ"Datei konnte nicht geöffnet werden!\n")
  )
)

------------------
  Martin 

Viele Grüße aus dem schönen Münsterland!

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