| |
| 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 – zum dritten Mal in Folge, eine Pressemitteilung
|
Autor
|
Thema: Textzeile Einlesen (671 mal gelesen)
|
Ex-Mitglied | |
Niggemann Mitglied
Beiträge: 165 Registriert: 31.10.2003 Win 98 Se, ACAD 2004, XP Prof, ACAD 2004 und ACAD 2010
|
erstellt am: 23. Aug. 2006 23:09 <-- editieren / zitieren --> Unities abgeben: Nur für Rabbit 007
|
CAD-Huebner Ehrenmitglied V.I.P. h.c. Verm.- Ing., ATC-Trainer
Beiträge: 9803 Registriert: 01.12.2003 One AutoCAD 2.5 - 2024, AutoCAD, Civil 3D, Win10/Win11
|
erstellt am: 24. Aug. 2006 00:07 <-- editieren / zitieren --> Unities abgeben: Nur für Rabbit 007
Ich würde nicht mit read-line lesen, da ja immer nur bis cr+lf gelesen wird. Besser ist es, mit read-char zeichenweise zu lesen. Aber binaer mit Lisp zu lesen ist mit Standardlisp nur eingeschränkt möglich. Ich zitiere mal aus der Lisp-Online Hilfe und im speziellen auch die Aussage von Mapcar Zitat:
... Ich habe ja nur vor dem Lesen von binären Streams gewarnt, da macht Lisp nämlich aus jedem Byte 0x0A ein 0x0D.
in diesem Beitrag: http://ww3.cad.de/foren/ubb/Forum54/HTML/011654.shtml#000018 ------------------ Mit freundlichem Gruß Udo Hübner Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied | |
spider_dd Mitglied
Beiträge: 1144 Registriert: 27.11.2003 Win 10Pro Intel(R) Core(TM) i7-7700 NVIDIA Quadro P1000 ACAD, Civil-3D 2018
|
erstellt am: 24. Aug. 2006 13:57 <-- editieren / zitieren --> Unities abgeben: Nur für Rabbit 007
Hallo Rabbit, hast Du Dir mal im einzelnen angesehen was Du einliest? Und dann sieh Dir Deine Datei mal in einem Hex-Editor an. Bei mir endet die erste gelesene Zeile mit "Modemnˆ", in der Datei kommt danach ein 0x0D (= CR). Die zweite gelesenen Zeile endet mit "uXm", in der Datei kommt danach ein 0x1A (= SUB) was auch immer das ist. Danach werden bei mir keine weiteren Daten gelesen (read-line liefert nil) Springt der Zeiger dort ans Dateiende? Also wie Udo schon sagte, wahrscheinlich besser Zeichenweise lesen und Zeilentrennung manuell bei 0x0D oder/und 0x0A (= LF) einfügen. lg Thomas Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Niggemann Mitglied
Beiträge: 165 Registriert: 31.10.2003 Win 98 Se, ACAD 2004, XP Prof, ACAD 2004 und ACAD 2010
|
erstellt am: 24. Aug. 2006 21:30 <-- editieren / zitieren --> Unities abgeben: Nur für Rabbit 007
@Rabbit Ich sehe es wie Thomas es wird wohl der einfachste Weg sein, beim lesen hatte ich deinen Anhang nicht gesehen. @Thomas Wenn ich das richtig sehe hast du mit deinem "SUB" recht eine Erklärung gibt es hier: [URL=http://de.wikipedia.org/wiki/Steuerzeichen][/URL] @Udo Hab mir deinen Link angesehen und etwas geblättert und bin auf etwas gestoßen was mich intressiert, Daten aus einem Messgerät über eine Com-Schnittstelle einzulesen. Probiert habe ich einiges rausgekommen ist nur das ACAD komplett stehen bleibt sobald ich vom COM lesen will. Das Messgerät muß nicht angesprochen werden, es sendet auf Knopfdruck die Daten, lt. Hersteller reine Ascii Zeichen. Meine Frage Iniziallisierst du die Com-Schnittstelle oder hast du eine Idee was ich verkehrt mache. Gruß Niggemann Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CAD-Huebner Ehrenmitglied V.I.P. h.c. Verm.- Ing., ATC-Trainer
Beiträge: 9803 Registriert: 01.12.2003 One AutoCAD 2.5 - 2024, AutoCAD, Civil 3D, Win10/Win11
|
erstellt am: 24. Aug. 2006 22:36 <-- editieren / zitieren --> Unities abgeben: Nur für Rabbit 007
Zitat: Original erstellt von Niggemann: [B... Meine Frage - initialisierst du die Com-Schnittstelle oder hast du eine Idee was ich verkehrt mache.Gruß Niggemann[/B]
Tja - was machst du denn? Also die Com-Ansteuerung aus Autolisp heraus ist sehr beschränkt. Datenrate und dergleichen stelle ich über die Systemsteuerung bzw. auf der Windows Console mit dem Mode Befehl ein, so dass es zum Messgerät passt. Dann wird mit
Code:
... ((WHILE (/= 10 (SETQ char (READ-CHAR comread))) ; 10 ist das <CR> ...
so lange gelesen, bis ein Zeichen ASCII 10 kommt. Das muss natürlich auch kommen, damit die Schleife beendet werden kann. Klappt denn der Datenempfang mit z.B. Hyperterminal problemlos?
------------------ Mit freundlichem Gruß Udo Hübner Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
spider_dd Mitglied
Beiträge: 1144 Registriert: 27.11.2003 Win 10Pro Intel(R) Core(TM) i7-7700 NVIDIA Quadro P1000 ACAD, Civil-3D 2018
|
erstellt am: 25. Aug. 2006 08:13 <-- editieren / zitieren --> Unities abgeben: Nur für Rabbit 007
Hallo Rabbit, Zitat: Original erstellt von Niggemann: @Thomas Wenn ich das richtig sehe hast du mit deinem "SUB" recht eine Erklärung gibt es hier: [URL=http://de.wikipedia.org/wiki/Steuerzeichen][/URL]
Na da haben wir es doch!! Zitat: aus wikipedia SUB Substitute Ersetzen Steht als Ersatz für ein Zeichen, das ungültig oder fehlerhaft ist. Dateiendezeichen (EOF, End of File) für Textdateien unter CP/M mangels bytegenauer Dateilängen, war anfänglich, obwohl unnötig, auch unter DOS üblich.
Dies wird offensichtlich von Lisp als Dateiende interpretiert und damit ist dann Schluss mit Einlesen. lg Thomas Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Niggemann Mitglied
Beiträge: 165 Registriert: 31.10.2003 Win 98 Se, ACAD 2004, XP Prof, ACAD 2004 und ACAD 2010
|
erstellt am: 25. Aug. 2006 12:01 <-- editieren / zitieren --> Unities abgeben: Nur für Rabbit 007
Hallo Udo, Ich öffne den Comport mit (setq COMRAED (open "COM1:" "r")) und bekomme folgendes in Visual Lisp zurück: #<file "COM1:"> {name} "COM1: {mode} :INPUT {position}0 {EOF}nil nun prüfe ich mit dieser Zeile (setq CHAR (read-char COMREAD)) ohne die while zu benutzen und ACAD bzw. Visual Lisp steht, nichts geht mehr. Der Datenfluß ist Gewährleistet da die zum Messgerät gehöhrende Software Einwandfrei arbeitet. Die Software ist mir nur zu Aufwändig und zu Umständlich in der Handhabung. Gruß Niggemann Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CAD-Huebner Ehrenmitglied V.I.P. h.c. Verm.- Ing., ATC-Trainer
Beiträge: 9803 Registriert: 01.12.2003 One AutoCAD 2.5 - 2024, AutoCAD, Civil 3D, Win10/Win11
|
erstellt am: 25. Aug. 2006 17:26 <-- editieren / zitieren --> Unities abgeben: Nur für Rabbit 007
Zitat: Original erstellt von Niggemann: ...Der Datenfluß ist gewährleistet, da die zum Messgerät gehörende Software einwandfrei arbeitet...Gruß Niggemann
Meine Frage war aber: Zitat:
Klappt denn der Datenempfang mit z.B. Hyperterminal problemlos?
Das nicht ohne Grund, denn viele Geräte im Vermessungsbereich (z.B. ältere Wild-Geräte) arbeiten mit einer Prüfung für den Datenempfang, wo die empfangende Software ein bestimmtes Zeichen zurücksenden muss, bevor (weitere) Daten gesendet werden. Also zuerst mal bitte mit Hyperterminal testen. ------------------ Mit freundlichem Gruß Udo Hübner Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CAD-Huebner Ehrenmitglied V.I.P. h.c. Verm.- Ing., ATC-Trainer
Beiträge: 9803 Registriert: 01.12.2003 One AutoCAD 2.5 - 2024, AutoCAD, Civil 3D, Win10/Win11
|
erstellt am: 25. Aug. 2006 17:36 <-- editieren / zitieren --> Unities abgeben: Nur für Rabbit 007
Was gibt denn MODE COM1: auf der NT-COnsole für Einstellungen aus? Die zum Messgerät gehörende Software kann diese Parameter ja selst auf die benötigten Werte überschreiben, LISP nicht. Code:
C:\>mode com1:Status von Gerät COM1: ---------------------- Baudrate: 1200 Parität: None Datenbits: 7 Stoppbits: 1 Zeitlimit: OFF XON/XOFF: OFF CTS-Handshaking: OFF DSR-Handshaking: OFF DSR-Prüfung: OFF DTR-Signal: ON RTS-Signal: ON
------------------ Mit freundlichem Gruß Udo Hübner Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Niggemann Mitglied
Beiträge: 165 Registriert: 31.10.2003 Win 98 Se, ACAD 2004, XP Prof, ACAD 2004 und ACAD 2010
|
erstellt am: 25. Aug. 2006 20:38 <-- editieren / zitieren --> Unities abgeben: Nur für Rabbit 007
Hallo Udo, mit Hyperterminal klappt es Problemlos, mußte das Programm aber erst installieren. Sollten es nicht mit Lisp Funktionieren ist es mit Hyperterminal eine Alternative an die Messdaten zukommen. Das Ergebnis von "mode com1:" ist bei mir folgendes: Status für Gerät COM1: ----------------------- RETRY=NONE Die Einstellungen von Hyperterminal sin folgende: Bits pro sec. = 2400 Datenbits = 8 Parität = keine Stoppbits = 1 Protokoll = Hardware Allso die Vorgaben, dieses gilt auch für die Erweiterten Einstellungen. Bis auf die Bautrate sind es genau die selben Einstellungen für meinen Comport in der Systemsteuerung. Gruß Niggemann
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |