Hot News:
   

Mit Unterstützung durch:

  Foren auf CAD.de
  Creo Elements/Direct
  Speicher/Schreiben mit with-open-file

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

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 PTC CREO
  
BOM Assistant für Stücklistenerstellung , eine App
Autor Thema:  Speicher/Schreiben mit with-open-file (113 / mal gelesen)
MiBr
Mitglied
Konstrukteur


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

Beiträge: 593
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: 12. Nov. 2025 11: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

Hallo,

ich habe eine Tool geschrieben bei dem ich mittels 'with-open-file' eine Datei xxx.csv schreibe.
Das funktioniert auch sehr gut solange die xxx.csv nicht geöffnet ist!
Wenn diese Datei bereits mit Excel geöffnet haben kommt folgerichtig die Fehlermeldung:

Zitat:
LISP-Fehler:
Cannot create the file c:\Temp\Kontrollbericht.csv.

Wenn ich dies jetzt mit 'Ok' bestätige fliege ich leider aus dem Tool.
Und an dieser Stelle hätte ich gern eien Meldung wie:
'Die xxx.csv kann nicht erstellt werden, Bitte in Excel schließen'
und wenn ich mit 'Ok' bestätige bleibe ich in meinem Tool.

Hiewr mal einen Lisp-Schnipsel:

(setq outfile "c:\\Temp\\xxx.csv")
(with-open-file
(out outfile
  :direction :Output
  :if-exists :supersede
  :if-does-not-exist :create
  :external-format :ansi)
   (format out "Test")
   ...
   ...
)

Kann man das irgend wie abfangen z:B. :error ...  einfügen oder ...?

Gruß Michael

[Diese Nachricht wurde von MiBr am 12. Nov. 2025 editiert.]

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

der_Wolfgang
Moderator
Tastenhauer


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

Beiträge: 2386
Registriert: 3.20.

● PE60+80+90@home
● W10 Pro Build19045.6466
● Drafting V17~V20.7@job
● Modeling V17~V20.7@job
● Windchill 12.1.2.6@job
● UWGM Client 13.1.0.1@job
● Taschenrechner
● brain 6.3
● Stift+Zettel V8.42

erstellt am: 12. Nov. 2025 18:09    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 MiBr 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von MiBr:
ich habe eine Tool geschrieben bei dem ich mittels 'with-open-file' eine Datei xxx.csv schreibe.
Das funktioniert auch sehr gut solange die xxx.csv nicht geöffnet ist!
Wenn diese Datei bereits mit Excel geöffnet ist kommt folgerichtig die Fehlermeldung:

ja ja..  manche Applicationen meinen da unbedingt den dicken Daumen drauf haben zu müssen. Übel ist das bei einfachen Betrachtern, die ja 'nur gucken was drin ist'. Stichwort 'file handles'.

du könntest mal probieren die Datei TEST weise zu erst zu öffnen:

Code:
(setq outfile "c:/Temp/xxx.csv")  ;; use slashes for easier typing
(setq res-open (open outfile :Direction :Output :if-exists :error :if-does-not-exist :create :external-format :utf-8-bom))
(setq res-close (close outfile))

Daraus machst du eine Funktion "file-is-writable" .. und diese rufst du via sd-call-cmds auf, weil dann kannst du mit dessen :success und :failure form arbeiten. Du rufst deinen Kram doch eh aus einem Dialog heraus aus, oder?

Wenn du mit 'open' arbeitest must du mit auch mit 'close' arbeiten.

zum Studium:

wichtig / neu wäre hier der parameter :error für :if-exist und :if-does-not-exist  Vielleicht hilft das?!?

Der Macro with-open-file kann aber auch mit :error arbeiten. Das wäre zu bevorzugen.


-----

Die kannte ich auch nicht:  http://clhs.lisp.se/Body/f_ensu_1.htm#ensure-directories-exist


------------------
Firefox ESRJava Forum Stuttgart JUGS ● OSD Hilfeseite (de) / help page (en)NotePad++BuFDi

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

MiBr
Mitglied
Konstrukteur


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

Beiträge: 593
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. Nov. 2025 11:34    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 Wolfgang,

nach dem ich den ganzen morgen dumm rum probiert habe, habe ich gemwerkt das ich es mal wieder bin!

Und Du schreibst ja:

Zitat:
... diese rufst du via sd-call-cmds auf, weil dann kannst du mit dessen :success und :failure form arbeiten. Du rufst deinen Kram doch eh aus einem Dialog heraus aus, oder?

Natürlich mache ich das aus einen Dialog heraus und wenn ich da meine 'local-funktion' mit einem 'sd-call_cmds'
aufrufe und noch mit einem ':failure' versehe bin ich ja schon fertig!

Naja zu meiner Verteildigung: First-time-with -> 'sd-call_cmds :failure' (Sehr nützlich!)

Aber wie immer ein großes DANKESCHÖN! Ohne deine Anregungen wäre ich nicht darauf gekommen! 

Gruß Michael

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



Anzeige:Infos zum Werbeplatz >>

GeoVisual Civil Engineer CAD APP für 3D, Tiefbau, AEC - Architektur-, Ingenieur- und Bauwesen

Die benutzerfreundliche Softwarelösung zur Visualisierung von Infrastrukturplanungen

der_Wolfgang
Moderator
Tastenhauer


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

Beiträge: 2386
Registriert: 3.20.

● PE60+80+90@home
● W10 Pro Build19045.6466
● Drafting V17~V20.7@job
● Modeling V17~V20.7@job
● Windchill 12.1.2.6@job
● UWGM Client 13.1.0.1@job
● Taschenrechner
● brain 6.3
● Stift+Zettel V8.42

erstellt am: 14. Nov. 2025 17:09    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 MiBr 10 Unities + Antwort hilfreich


cadde-29-004994.lsp

 
Zitat:
Original erstellt von MiBr:
..., habe ich gemerkt, das ich es mal wieder bin!
Ohne deine Anregungen wäre ich nicht darauf gekommen!      

Gerne! Und in der Anlage mal noch ein kleiner Test Dialog.
  • Da jener Dialog 'sequential' ist, hat er kein User Interface
  • Da jener Dialog keine zu erfragenden Variablen hat, rennt er direkt in die :OK-action
  • Da er (am Model) nix ändert, taucht er auch NICHT im UNDO auf.

So ist der Dialog nur ein wrapper für einen Funktionsaufruf mit sd-call-cmds drum rum.

Sieht bischen nach Overhead aus. Ist aber für so Sonderfälle mal vertretbar aus meiner Sicht.

Oft hat man später dann eine andere Möglichkeit gefunden den üblen Sonderfall abzuhandeln. Dann erfolgt eben ein Code-Rückbau.

Ich hoffe das sd-call-cmds template ist erhellend genug (für diese dunkle Jahreszeit)

Zum Testen kann man das dann auf der Commandline direkt aufrufen:

Code:
(call-my-risky-function)
========================================================

"my-risky-function call: Husten ist ein Problem"

* [["OLI"]]


* [["SD-CALL-ACTION-ERROR"]]


* [["LISP error:
\"The variable THIS-VARAIBLE-IS-MAD is unbound. This may have been caused by:
(1) Entering a string that wasn't enclosed in quotes.
(2) Entering a command belonging to a module that has not been activated.
(3) Trying to load a file that has an incorrect format.
(4) Calling a function that has not been enclosed in parenthesis ().\""]]


* [[NIL]]

========================================================

(:CALL-RESULT :HOUSTEN-THERE-IS-A-PROBLEM)
(:FUNCTION-RESULT NIL)
========================================================


Learning:


------------------
Firefox ESRJava Forum Stuttgart JUGS ● OSD Hilfeseite (de) / help page (en)NotePad++BuFDi

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

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2025 CAD.de | Impressum | Datenschutz