| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| PNY WIRD VON NVIDIA ZUM HÄNDLER DES JAHRES GEWÄHLT, eine Pressemitteilung
|
Autor
|
Thema: Fehlermeldung beim Textdatei-Lesen (678 mal gelesen)
|
Mario Rosenbohm Mitglied Vermessungsingenieur
Beiträge: 118 Registriert: 09.10.2003
|
erstellt am: 05. Apr. 2006 13:58 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich habe einen "blöden" Fehler in einer Lisp-Routine, die eine Textdatei (INI) einliest. Nach der letzten Zeile kommt die Fehlermeldung: "Fehlerhafter Argumenttyp: stringp nil" Wird durch Lisp keine EOF erkannt? Gruß Mario Ausschnitt aus der Routine:
Code:
(setq iniDatei (open "D:\\Projekte\\AutoCAD\\GMK-ZI\\ImportKor.ini" "r")) (setq iniZeile (read-line iniDatei)) (getSectionName iniZeile) (if (= sectionName "ImportKor") (progn (while (setq iniZeile (read-line iniDatei)) ; <<< Hier wird nach der lezten Zeile der Fehler geschmissen (getLineName iniZeile) (getLineValue iniZeile) (if (/= lineName nil) (progn (if (= lineName "Erweiterung") (setq fileExt lineValue)) (if (= lineName "Startpfad") (setq filePath lineValue)) (if (= lineName "Schrifthoehe") (setq fontHeight lineValue)) (if (= lineName "Schriftrichtung") (setq fontAngle lineValue)) (if (= lineName "Schriftstil") (setq fontStil lineValue)) (if (= lineName "Schriftausrichtung") (setq fontPos lineValue)) (if (= lineName "StandartSymbolLayer") (setq layerSyb lineValue)) (if (= lineName "StandartNameLayer") (setq layerNum lineValue)) (if (= lineName "StandartHoeheLayer") (setq layerNN lineValue)) (if (= lineName "PunktNum_Offs_RW") (setq pNrOffsRW lineValue)) (if (= lineName "PunktNum_Offs_HW") (setq pNrOffsHW lineValue)) (if (= lineName "PunktNum_Offs_NN") (setq pNrOffsNN lineValue)) (if (= lineName "PunktNN_Offs_RW") (setq pNNOffsRW lineValue)) (if (= lineName "PunktNN_Offs_HW") (setq pNNOffsHW lineValue)) (if (= lineName "PunktNN_Offs_NN") (setq pNNOffsNN lineValue)) (if (= lineName "PunktWeight_Offs_RW") (setq pWeightOffsRW lineValue)) (if (= lineName "PunktWeight_Offs_HW") (setq pWeightOffsHW lineValue)) (if (= lineName "PunktWeight_Offs_NN") (setq pWeightOffsNN lineValue)) (if (= lineName "OffsetFaktor") (setq offsFaktor lineValue)) ) (alert "Leere Zeile") ) ) ) ) (close iniDatei)
INI-Datei:
Code:
[ImportKor] Erweiterung=kor Startpfad=C:\DATEN\ Schrifthoehe=0.2 Schriftrichtung=0.0 Schriftstil=STANDART Schriftausrichtung=ML PunktNum_Offs_RW=1.0 PunktNum_Offs_HW=1.0 PunktNum_Offs_NN=0.0 PunktNN_Offs_RW=1.0 PunktNN_Offs_HW=0.0 PunktNN_Offs_NN=0.0 PunktWeight_Offs_RW=1.0 PunktWeight_Offs_HW=-1.5 PunktWeight_Offs_NN=0.0 OffsetFaktor=1.0 StandartSymbolLayer=Nachladepunkt_Syb StandartNameLayer=Nachladepunkt_Num StandartHoeheLayer=Nachladepunkt_NN StandartWeightLayer=Nachladepunkt_Weight<<Diese Zeile wird noch eingelesen, nach dem Zeilenumbruch kommt die Fehlermeldung.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 05. Apr. 2006 14:12 <-- editieren / zitieren --> Unities abgeben: Nur für Mario Rosenbohm
denke mal, die Funktionen getLineName und getLineValue (woauchimmer die her sind) vertragen keine Leerstringeingabe ... wie sie (read-line ..) liefert, wenn die letzte Zeile in der Datei mit "Enter" abgeschlossen wurde.. ------------------ - Thomas - "Bei 99% aller Probleme ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben." Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Mario Rosenbohm Mitglied Vermessungsingenieur
Beiträge: 118 Registriert: 09.10.2003
|
erstellt am: 05. Apr. 2006 14:49 <-- editieren / zitieren --> Unities abgeben:
|
Mario Rosenbohm Mitglied Vermessungsingenieur
Beiträge: 118 Registriert: 09.10.2003 AutoCAD Civil 3D 2017, 2022 CADdy V.17 Laptop Win10 Intel i7 2.71GHz, 64GB Ram,
|
erstellt am: 06. Apr. 2006 07:06 <-- editieren / zitieren --> Unities abgeben:
... wie meistens liegt der Fehler ganz wo anders. Die While-Schleife wurde ordentlich verlassen. Der Fehler wurde weiter unten in der Routine geschmissen. Kann man im VLISP eigentlich wie in der Borland C++Builder-IDE den Quellcode debuggen. z.B.: Einzelschrittdurchlauf Variablenüberwachung etc. Gibt es hierzu ein Tutorial (möglichst in Deutsch)? Gruß Mario Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Brischke Moderator CAD on demand GmbH
Beiträge: 4187 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools (d-tools.eu)
|
erstellt am: 06. Apr. 2006 07:25 <-- editieren / zitieren --> Unities abgeben: Nur für Mario Rosenbohm
|
fuchsi Mitglied Programmierer c#.net Datawarehouse
Beiträge: 1201 Registriert: 14.10.2003 AutoCad Version 2012 deu/enu <P>Windows 7 64bit
|
erstellt am: 06. Apr. 2006 15:13 <-- editieren / zitieren --> Unities abgeben: Nur für Mario Rosenbohm
also an dem Code finde ich mal keinen Fehler, der sollte eigetnlich so durchlaufen, es kann vielleicht sein, dass die INI-Datei zum Schluss noch eine Leerzeile beinhaltet, und Deine Funktionen nichts mit einem "" anfangen ? Strinp->NIL kann nicht in deiner markierten zeile auftreten, weil hier keine Funktion definitiv einen Strin erwartet. zu dem ganzen zeugs hier ! (if (/= lineName nil) (progn (if (= lineName "Erweiterung") (setq fileExt lineValue)) (if (= lineName "Startpfad") (setq filePath lineValue)) (if (= lineName "Schrifthoehe") (setq fontHeight lineValue)) (if (= lineName "Schriftrichtung") (setq fontAngle lineValue)) (if (= lineName "Schriftstil") (setq fontStil lineValue)) (if (= lineName "Schriftausrichtung") (setq fontPos lineValue)) (if (= lineName "StandartSymbolLayer") (setq layerSyb lineValue)) (if (= lineName "StandartNameLayer") (setq layerNum lineValue)) (if (= lineName "StandartHoeheLayer") (setq layerNN lineValue)) (if (= lineName "PunktNum_Offs_RW") (setq pNrOffsRW lineValue)) (if (= lineName "PunktNum_Offs_HW") (setq pNrOffsHW lineValue)) (if (= lineName "PunktNum_Offs_NN") (setq pNrOffsNN lineValue)) (if (= lineName "PunktNN_Offs_RW") (setq pNNOffsRW lineValue)) (if (= lineName "PunktNN_Offs_HW") (setq pNNOffsHW lineValue)) (if (= lineName "PunktNN_Offs_NN") (setq pNNOffsNN lineValue)) (if (= lineName "PunktWeight_Offs_RW") (setq pWeightOffsRW lineValue)) (if (= lineName "PunktWeight_Offs_HW") (setq pWeightOffsHW lineValue)) (if (= lineName "PunktWeight_Offs_NN") (setq pWeightOffsNN lineValue)) (if (= lineName "OffsetFaktor") (setq offsFaktor lineValue)) ) (alert "Leere Zeile") ) warum taufst Du die Vaiablen, und die INI-Einträge nicht gleich dann könntest Du den ganzen Schrott in einem Einzeiler unterbringen
(if lineName (set (read lineName) lineValue)) (set (read "a1") 56) ist das gleiche wie (setq a1 56) damit kann man variablennamen als "String" vorliegen haben ------------------ Ing. Anton Fuchs WWW.FFZELL.AT.TC Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Mario Rosenbohm Mitglied Vermessungsingenieur
Beiträge: 118 Registriert: 09.10.2003
|
erstellt am: 06. Apr. 2006 19:33 <-- editieren / zitieren --> Unities abgeben:
@fuchsi vielen Dank für Deine Bemühung, aber ich schrieb schon im vorletzten Beitrag, daß der Fehler nicht in dieser While-Schleife verursacht wurde. Nur durch das von mir bis dahin (nur in VLisp) verwendete "Billigdebugging" mit (prompt "..") (princ ...) (print) hat die ware Fehlerquelle nicht gleich aufgedeckt. @Brischke Dankeschön das Debugging klappt so ganz gut. Bis bald Mario Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |