| | | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Creo | | | | IIoT Trainings mit ThingWorx, ein Webinar am 23.09.2024
|
Autor
|
Thema: Zeile in Textdatei einfügen aus LISP-Makro heraus (1058 / mal gelesen)
|
Seele Mitglied Konstrukteur
Beiträge: 389 Registriert: 11.06.2003 Intel(R) Xeon(R) W-2245 CPU @ 3,90 GHz, 64GB RAM NVidia Quadro RTX A4000 Win10-64Bit Elements/Direct v20.7.0.0 PartLibrary, Surfacing, 3D-PDF, 3D-Access, Unigraphics-Schnittstelle
|
erstellt am: 23. Feb. 2016 07:28 <-- editieren / zitieren --> Unities abgeben:
Frage vom LISP-Anfänger an LISP-Experten, ... wie ist es möglich in LISP eine Textdatei zu öffnen, Zeile für Zeile auszuwerten und dann hinter gefundener Zeile eine zusätzliche neue Zeile einzufügen und diese dabei in eine neue Datei zu schreiben? In einer DOS-Batch-Datei bewerkstellige ich es funktionierender Weise so : @echo off & setlocal set "Neuzeile=NeuenTextEinfügen;" set "Nach=TextinZeile;" set "Datei=%1" set "DateiTmp=%1.x_t for /f "delims=" %%i in (%Datei%) do ( >>"%DateiTmp%" echo %%i echo %%i|findstr /b "%Nach%">nul && >>"%DateiTmp%" echo %Neuzeile% ) Mein Problem, ich kenne mich mit der Syntax von SolidDesigner-LISP noch viel zu wenig aus. Vielleicht kann mir einer von Euch helfen, wie es hier gemacht werden kann. Ich denke man muss hier nicht unbedingt den Umweg über eine Batch-Datei machen? Alternativ stellt sich mir die Frage, wie kann ich in LISP eine Batch-Datei aufrufen und dabei auch noch einen Parameter mit der zu ändernden Datei übergeben? Dies sollte jedoch der zweite Ansatz sein, falls es mit dem ersten überhaupt nicht geht. Danke im Vorraus Gruß Wolfgang ------------------ alles ist möglich, nichts funktioniert und trotzdem muß es bis morgen geschafft sein. Werden wir es schaffen? Ja wir schaffen das !!! :-) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Walter Geppert Moderator Frank und Frei
Beiträge: 2158 Registriert: 12.12.2000 Konstruktion von Sondermaschinen, Montageautomaten, Meß- und Prüfeinrichtungen, Vorrichtungen und Produktentwicklung mit Creo Elements/Direct Modeling 20.6, AdvancedDesign, Surfacing, Simulate, SolidPower, ModelManager auf HP ZBook Fury 16 G9, Windows 10 Pro 64
|
erstellt am: 23. Feb. 2016 08:37 <-- editieren / zitieren --> Unities abgeben: Nur für Seele
|
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: 23. Feb. 2016 08:43 <-- editieren / zitieren --> Unities abgeben: Nur für Seele
Du kannst Dich aus dem reichen Fundus von Tutorials und Doku zu Common Lisp bedienen. Zum Beispiel wird hier beschrieben, wie man in Common Lisp eine Datei Zeile für Zeile einliest: http://cl-cookbook.sourceforge.net/files.html#line Auf dieser Basis kannst Du Dir Deinen Code bauen. Grobentwurf (ohne jedweden Test): Code:
(in-package :de.clausbrod)(defun copy-file(infile outfile) (with-open-file (outstream outfile :direction :output) (with-open-file (instream infile) (do ((line (read-line instream nil) (read-line instream nil))) ((null line)) (write-line line outstream)))))
Der obige Code kopiert eine Datei unverändert, und das Zeile für Zeile. In Deinem Fall musst Du noch entsprechende Logik einbauen, um auf Kenner in der Eingabedatei zu reagieren und dann etwas anderes zu tun, als nur zu kopieren. ------------------ CoCreate Modeling FAQ: http://www.clausbrod.de/CoCreateModeling/ - Blog: http://www.clausbrod.de/Blog
[Diese Nachricht wurde von clausb am 23. Feb. 2016 editiert.] 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: 23. Feb. 2016 09:00 <-- editieren / zitieren --> Unities abgeben: Nur für Seele
Diese Variante liest sich wahrscheinlich etwas leichter: Code:
(defun copy-file2(infile outfile) (with-open-file (outstream outfile :direction :output) (with-open-file (instream infile) (loop for line = (read-line instream nil) while line do (write-line line outstream)))))
Na gut, und wenn wir eh schon soweit sind:
Code:
(defun copy-file-with-replacement(infile outfile marker replacement) (with-open-file (outstream outfile :direction :output) (with-open-file (instream infile) (loop for line = (read-line instream nil) while line do (if (search marker line) (write-line replacement outstream) (write-line line outstream))))))
Beispielaufruf:
Code:
(copy-file-with-replacement #P"foo.txt" #P"modified-foo.txt" "Java" "Lisp")
Weiterhin komplett ungetestet. PS: An den Moderator: Vielleicht sollten wir das ins Programmierforum verschieben? ------------------ CoCreate Modeling FAQ: http://www.clausbrod.de/CoCreateModeling/ - Blog: http://www.clausbrod.de/Blog
[Diese Nachricht wurde von clausb am 23. Feb. 2016 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Seele Mitglied Konstrukteur
Beiträge: 389 Registriert: 11.06.2003 Intel(R) Xeon(R) W-2245 CPU @ 3,90 GHz, 64GB RAM NVidia Quadro RTX A4000 Win10-64Bit Elements/Direct v20.7.0.0 PartLibrary, Surfacing, 3D-PDF, 3D-Access, Unigraphics-Schnittstelle
|
erstellt am: 24. Feb. 2016 07:35 <-- editieren / zitieren --> Unities abgeben:
Vielen Dank an Walter und Claus für die schnellen Antworten. Ich habe es gestern Abend ausprobiert und es hat funktioniert, .... Mit jedem LISP-Makro bekommt man mehr Erfahrung und vielleicht wird es ja noch mit dem LISPeln, ... Danke, Danke, Danke, ... ------------------ alles ist möglich, nichts funktioniert und trotzdem muß es bis morgen geschafft sein. Werden wir es schaffen? Ja wir schaffen das !!! :-) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Walter Geppert Moderator Frank und Frei
Beiträge: 2158 Registriert: 12.12.2000 Konstruktion von Sondermaschinen, Montageautomaten, Meß- und Prüfeinrichtungen, Vorrichtungen und Produktentwicklung mit Creo Elements/Direct Modeling 20.6, AdvancedDesign, Surfacing, Simulate, SolidPower, ModelManager auf HP ZBook Fury 16 G9, Windows 10 Pro 64
|
erstellt am: 24. Feb. 2016 07:39 <-- editieren / zitieren --> Unities abgeben: Nur für Seele
|
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|