| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Creo |
| |
| Optimieren Sie Ihr Rechenzentrumsn, eine Pressemitteilung
|
Autor
|
Thema: Ordnerinhalt über LISP auslesen (2251 / mal gelesen)
|
Greskamp Mitglied Ingenieur
Beiträge: 523 Registriert: 12.03.2003
|
erstellt am: 12. Dez. 2017 14:49 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich habe mal eine allgemeine Frage zu Lisp. Ich würde gerne einen Ordner z.B. "V:\test\" auslesen und es sollen alle dateienname im Ordner die eine .pdf DAtei sind in eine Datei schreiben! Ist das über lisp möglich? kann mir jemand was zu dem Befehl sagen oder wo ich sowas finden könnten. Vielen Dank an die Profis. ------------------ Gruß Peter Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
clausb Ehrenmitglied V.I.P. h.c.
Beiträge: 2914 Registriert: 20.12.2000 Ich schreibe das hier in meiner Freizeit und spreche weder für meinen Arbeitgeber noch für andere Firmen. Mehr Unsinn von mir unter clausbrod.de.
|
erstellt am: 12. Dez. 2017 15:11 <-- editieren / zitieren --> Unities abgeben: Nur für Greskamp
|
Greskamp Mitglied Ingenieur
Beiträge: 523 Registriert: 12.03.2003
|
erstellt am: 12. Dez. 2017 15:23 <-- editieren / zitieren --> Unities abgeben:
|
der_Wolfgang Moderator Tastenhauer
Beiträge: 2219 Registriert: 3.20. ● PE60+80@home ● W10 Pro Build10.0.19045.4780 ● Drafting V17~V20.7 ● Modeling V17~V20.7 ● Windchill 12.1.2.6 ● UWGM Client 13.0.0.1
|
erstellt am: 12. Dez. 2017 21:09 <-- editieren / zitieren --> Unities abgeben: Nur für Greskamp
Ich spendiere mal noch eine einfache / einzeilige Antwort: Code: (directory "c:/temp/*pdf")
Beispielausgabe Code: (#P"/cygdrive/c/temp/pm_fv_2017_05_23.pdf" #P"/cygdrive/c/temp/Crimmitschau_Textilmuseum_170923.pdf" #P"/cygdrive/c/temp/1und1_Preisliste_DslPakete.pdf")
Du hast also primaer nur die (directory ...) Funktion gesucht. Und gleich noch ne Warnung hinterher: Die Funktion listed NICHT die Datei 'LispForDummies.PDF' in selbigem Verzeichnis weil ... ja weil ... ... 'PDF' nun mal nicht 'pdf' und auch nicht 'Pdf' ist! Das ist eine ==>> Common LISP Function [edit]Befehl und Ausgabe getrennt[/edit] ------------------ ● Firefox ESR ● Java Forum Stuttgart JUGS ● OSD Hilfeseite (de) / help page (en) ● NotePad++ ● BuFDi ● [Diese Nachricht wurde von der_Wolfgang am 13. Dez. 2017 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Greskamp Mitglied Ingenieur
Beiträge: 523 Registriert: 12.03.2003
|
erstellt am: 12. Dez. 2017 21:38 <-- editieren / zitieren --> Unities abgeben: Nur für Greskamp
Hallo Wolfgang, Sorry, aber von diesem Code verstehe ich nicht mal eine Zeile, geschweige denn das ich weiß was ich damit machen soll. Schreibt der Code auch irgendwo ne Datei hin. Vielleicht kannst das du noch etwas näher erklären, fühl mich grad so als hätte ich von Lisp noch nie was gehört.. ------------------ Gruß Peter Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Greskamp Mitglied Ingenieur
Beiträge: 523 Registriert: 12.03.2003 MS: Windows 10 64bit OSD: 20.1 M020 ModelManager: 20.1 M020 NX 1899 TC 12.3
|
erstellt am: 13. Dez. 2017 07:00 <-- editieren / zitieren --> Unities abgeben:
ok, jetzt schreibe ich das noch mal klarer. Mit dem Code: Code:
(display (directory "C:/Temp/*.pdf"))
bekommt man eine Liste wie z.B. (C:/Temp/0815Rev.-.pdf C:/Temp/4711Rev.-.pdf) mit allen *.pdf Dateien aufgelistet. Aber nicht diese die *Pdf oder *PDF haben. Jetzt habe ich es verstanden. ------------------ Gruß Peter Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Greskamp Mitglied Ingenieur
Beiträge: 523 Registriert: 12.03.2003
|
erstellt am: 13. Dez. 2017 07:18 <-- editieren / zitieren --> Unities abgeben:
|
MiBr Mitglied Konstrukteur
Beiträge: 575 Registriert: 30.06.2015 HP Z440 Workstation 64GB Modeling 20.1.2.0 (x64) Drafting 20.1.2.0 (64x) klas. UI Modell Manager 20.1.2.0 Ansys Workbeanch 22R2 Mechanicail Pro + FKM Inside
|
erstellt am: 13. Dez. 2017 07:57 <-- editieren / zitieren --> Unities abgeben: Nur für Greskamp
Hallo, öffnen kannst Du den File z.B. mit: (oli:sd-display-url "C:\\TEMP\\plot.pdf") Falls es Dir nur darum geht einen PDF-File aus einem bestimmten Ordner zu öffnen, würde ich das allerdings so machen: Code: (in-package :custom) (use-package :OLI)(setf Default_Dir (sd-get-current-working-directory)) (sd-defdialog 'Datei_laden :dialog-title "PDF laden" :dialog-control :sequential :variables '( (File_SES :value-type :filename :direction :input :title "Datei" :prompt-text "Quelldatei angeben" :filename-incl-path t :initialdirectory "c:\\Temp\\" :fileType :pdf :after-input (lade_dat) ) ) ;; end variables :local-functions '( (Lade_dat () (oli:sd-display-url (Format nil "~a" (first File_SES))) (sd-set-current-working-directory Default_Dir) ) ; End Lade_dat );end local-funktions ) ;; end dialog
Gruß Michael Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Greskamp Mitglied Ingenieur
Beiträge: 523 Registriert: 12.03.2003
|
erstellt am: 13. Dez. 2017 10:48 <-- editieren / zitieren --> Unities abgeben:
Hallo Michael, ja danke, wollte jedoch wissen ob es da auch was in lisp gibt, also unabhängig vom Creo. ------------------ Gruß Peter [Diese Nachricht wurde von Greskamp am 13. Dez. 2017 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
der_Wolfgang Moderator Tastenhauer
Beiträge: 2219 Registriert: 3.20. ● PE60+80@home ● W10 Pro Build10.0.19045.4780 ● Drafting V17~V20.7 ● Modeling V17~V20.7 ● Windchill 12.1.2.6 ● UWGM Client 13.0.0.1
|
erstellt am: 13. Dez. 2017 12:30 <-- editieren / zitieren --> Unities abgeben: Nur für Greskamp
Zitat: Original erstellt von Greskamp: http://clhs.lisp.se finde ich ja klasse, aber die wenigsten Erklärungen verstehe ich.
Fuer solche Seiten braucht man in der Tat nicht nur Programmierkenntnisse sondern auch genuegend English Kenntnisse. Das ist aber bei jeder Detailfrage bei jeder Programmiersprache so. Zitat: wie bekomme ich so eine pdf jetzt geöffnet. glaube "open" meint hier was anderes.
Definiere 'öffnen'! Programmtechnisch versteht man darunter die bytes/strings der Datei zu lesen. Das waere dann so ein with-open-file ... oder aehnlich. Wenn Du meinst "anzeigen" dann waere sd-display-url ein Weg der in Modeling funktioniert. Wenn du das in common - lisp machen willst.. dann nehme ich an, das Du einen Betriebssystembefehl absetzen musst. Und das Betriebssystem findet fuer 'pdf' hoffentlich das passende Programm um die Datei anzuzeigen. Aber ich bin mir unsicher ob ich deine Frage(n) richtig verstanden habe. ------------------ ● Firefox ESR ● Java Forum Stuttgart JUGS ● OSD Hilfeseite (de) / help page (en) ● NotePad++ ● BuFDi ● Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Greskamp Mitglied Ingenieur
Beiträge: 523 Registriert: 12.03.2003
|
erstellt am: 13. Dez. 2017 12:34 <-- editieren / zitieren --> Unities abgeben:
ja und bei mir mangelt es an beidem, programmierkenntnisse und englisch. Mit "öffnen" meine ich in deinen Worten "anzeigen". Aber "sd-display-url" klappt ja nicht wenn ich das z.B. in LispWorks mal testen will. Solangsam verstehe ich auch deine hieroglyphen aus dem vorherigen post (nicht falsch verstehen) ------------------ Gruß Peter Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
der_Wolfgang Moderator Tastenhauer
Beiträge: 2219 Registriert: 3.20. ● PE60+80@home ● W10 Pro Build10.0.19045.4780 ● Drafting V17~V20.7 ● Modeling V17~V20.7 ● Windchill 12.1.2.6 ● UWGM Client 13.0.0.1
|
erstellt am: 13. Dez. 2017 13:14 <-- editieren / zitieren --> Unities abgeben: Nur für Greskamp
Ich habe mir mal erlaubt den code aus dem Claus'schem Snippet zu "end-SolidDesignern". Heraus kommt ein LISP file aus purem common lisp. siehe ls-l.lsp Es gibt ein paar kleine Modifikationen bei der Ausgabe. ______________________ @claus: wichtige Aenderung ist beim Schreiben des Logfiles: :if-exists :supersede. - Habe ich schon geaendert bei Dir. ______________________ ;; Attention! including the logfile in the filepattern to list files does NOT work! Erklaerung: Das logfile wird in der funktion ls-l zum Schreiben geoeffnet. Zwei Zeilen drunter in der dolist werden aber funktionen gerufen, die selbiges file zum Lesen oeffnen wollen. Das ist u'g'ischkt. Natuerlich koennte man das noch aendern. Aber das traegt nicht zur Beantwortung der Frage vom Peter bei. [edit]a) Claus-code schoen geaendert b) Erklaerung ergaenzt[/edit] ------------------ ● Firefox ESR ● Java Forum Stuttgart JUGS ● OSD Hilfeseite (de) / help page (en) ● NotePad++ ● BuFDi ● [Diese Nachricht wurde von der_Wolfgang am 13. Dez. 2017 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Greskamp Mitglied Ingenieur
Beiträge: 523 Registriert: 12.03.2003
|
erstellt am: 13. Dez. 2017 13:21 <-- editieren / zitieren --> Unities abgeben:
das habe ich mir so hin geändert. Code:
(defun ls-l(Verzeichnis dateityp logfile) (setq zaehlen 0) (change-directory Verzeichnis) (with-open-file (s logfile :direction :output) (dolist (Datei (directory dateityp)) (setq zaehlen (+ 1 zaehlen)) (format s "~A~%" (file-namestring Datei)) )) (format nil "Es sind ~D ~%Dateien im Ordner gezählt worden!!" zaehlen) )
mit dem einen komme ich aus. Aber wie mache ich jetzt weiter wenn ich z.B. die 5. DAtei in dem Logfile "öffnen" (anzeigen) möchte.... ------------------ Gruß Peter [Diese Nachricht wurde von Greskamp am 13. Dez. 2017 editiert.] [Diese Nachricht wurde von Greskamp am 13. Dez. 2017 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
der_Wolfgang Moderator Tastenhauer
Beiträge: 2219 Registriert: 3.20. ● PE60+80@home ● W10 Pro Build10.0.19045.4780 ● Drafting V17~V20.7 ● Modeling V17~V20.7 ● Windchill 12.1.2.6 ● UWGM Client 13.0.0.1
|
erstellt am: 13. Dez. 2017 14:44 <-- editieren / zitieren --> Unities abgeben: Nur für Greskamp
|
Greskamp Mitglied Ingenieur
Beiträge: 523 Registriert: 12.03.2003
|
erstellt am: 13. Dez. 2017 14:57 <-- editieren / zitieren --> Unities abgeben:
mal dazu was ich eigentlich am ende mal möchte. ein user gibt eine Eingabe ein, über dateiname die er als pdf öffnen möchte. in verschiedenen verzeichnissen liegen pdf datei ab. der user gibt ein z.B. "471". Dann sollen sich alle pdf's öffnen die als Dateiname 471*.pdf haben. denke dazu brauche ich das auslesen eines Ordners. um zu wissen was drin ist. Dann gehe ich Zeile für Zeile durch um den wahren Dateiname zu bekommen. Wenn ich den habe soll der geöffnet werden. Wenn das mit dem öffnen bequem mit dem sd-display-url geht, von mir aus. Mich hat es nur interessiert wie es als Lisp-befehl aussehen würde. ------------------ Gruß Peter [Diese Nachricht wurde von Greskamp am 13. Dez. 2017 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Greskamp Mitglied Ingenieur
Beiträge: 523 Registriert: 12.03.2003 MS: Windows 10 64bit OSD: 20.1 M020 ModelManager: 20.1 M020 NX 1899 TC 12.3
|
erstellt am: 13. Dez. 2017 15:11 <-- editieren / zitieren --> Unities abgeben:
Das auslesen des logfiles habe ich auch soweit Code:
(defun auslesen (file) (with-open-file (str file :direction :input) (do ((line (read-line str nil 'eof) (read-line str nil 'eof))) ((eql line 'eof)) (format t "~A~%" line))) )
Aufrufen mit: Code: (auslesen "C:/Temp/ks02.txt")
------------------ Gruß Peter Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
clausb Ehrenmitglied V.I.P. h.c.
Beiträge: 2914 Registriert: 20.12.2000 Ich schreibe das hier in meiner Freizeit und spreche weder für meinen Arbeitgeber noch für andere Firmen. Mehr Unsinn von mir unter clausbrod.de.
|
erstellt am: 13. Dez. 2017 19:27 <-- editieren / zitieren --> Unities abgeben: Nur für Greskamp
Zitat:
denke dazu brauche ich das auslesen eines Ordners. um zu wissen was drin ist. Dann gehe ich Zeile für Zeile durch um den wahren Dateiname zu bekommen. Wenn ich den habe soll der geöffnet werden.Wenn das mit dem öffnen bequem mit dem sd-display-url geht, von mir aus. Mich hat es nur interessiert wie es als Lisp-befehl aussehen würde. [/i]
Ich denke, Du hast schon alle Informationen in dieser Diskussion bekommen, die Du brauchst:
- Directories nach passenden Dateinamen durchsuchen geht mit (directory). Bonusinfo: (oli:sd-directory-p) verwendet man, um Directories von Files zu unterscheiden.
- Eine PDF-Datei anzeigen kannst Du mit (oli:sd-display-url)
- Temporäre Logfiles sind unnötig.
Den Rest erledigt triviale Rekursion. Sollte ja auch noch ein kleiner Teil der Hausaufgabe für Dich selbst übrig bleiben, oder? ------------------ CoCreate Modeling FAQ: http://www.clausbrod.de/CoCreateModeling/ - Blog: http://www.clausbrod.de/Blog
[Diese Nachricht wurde von clausb am 13. Dez. 2017 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |