| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| Request a special discount on NVIDIA RTX 5000 Ada Generation GPU !, eine Pressemitteilung
|
Autor
|
Thema: Wie lang darf die Zeichenkette für read sein (1525 mal gelesen)
|
Niggemann Mitglied
Beiträge: 165 Registriert: 31.10.2003 Win 98 Se, ACAD 2004, XP Prof, ACAD 2004 und ACAD 2010
|
erstellt am: 21. Sep. 2012 00:46 <-- editieren / zitieren --> Unities abgeben:
Hallo Forum, ich komme mal wieder an meine Grenzen und brauche einen Denkanstoß. Ich schreibe eine Liste ("350020" "35" "Test" ....) in eine Datei und möchte diese mit READ als Liste wieder einlesen und auswerten. Dieses klappt seit einigen Jahren super. Bisher hatte ich immer eine Zeilenlänge von 400 - 600 Zeichen, jetzt habe ich 3600 Zeichen und bekomme die Fehlermeldung:"; Fehler: Zeichenfolge in Eingabe zu lang" Deshalb meine Frage wieviel Zeichen kann mann an read übergeben und wie kann ich es schaffen 3600 oder mehr Zeichen einzulesen? Wie immer vielen Dank im voraus. Niggemann Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
joern bosse Ehrenmitglied Dipl.-Ing. Vermessung
Beiträge: 1763 Registriert: 11.10.2004 Window 11 ACAD 2021 CIVIL 2021 BricsCAD ab V14 11th Gen Intel(R) Core(TM) i7-1165G7 @ 2.80GHz 2.80 GHz 32.0GB RAM NVIDIA GeForce MX450<P>
|
erstellt am: 21. Sep. 2012 07:26 <-- editieren / zitieren --> Unities abgeben: Nur für Niggemann
|
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 21. Sep. 2012 07:35 <-- editieren / zitieren --> Unities abgeben: Nur für Niggemann
Das mit der max.Länge solltest du eigentlich selber testen können .. und zum Einlesen hilft vielleicht das : (vl-load-com) (defun TXTFILE2LIST(FILENAME / FSO FILEOBJ FILESTREAM RETURN) (if(and(=(type FILENAME)'STR) (setq FILENAME(findfile FILENAME)) (setq FSO(vlax-create-object "Scripting.FileSystemObject")) ) (progn (if(setq FILEOBJ (vlax-invoke FSO "GetFile" FILENAME)) (progn (if(setq FILESTREAM(vlax-invoke FILEOBJ "OpenAsTextStream" 1 0)) (progn (while (=(vlax-get FILESTREAM "AtEndOfStream") 0) (setq RETURN (cons (vlax-invoke FILESTREAM "ReadLine") RETURN)) ) (vlax-invoke FILESTREAM "Close") (vlax-release-object FILESTREAM) ) ) (vlax-release-object FILEOBJ) ) ) (vlax-release-object FSO) ) ) (if RETURN(reverse RETURN)) ) Aufruf z.B. (TXTFILE2LIST "D:\TESTUS.txt") ------------------ - 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 |
Meldin Mitglied
Beiträge: 398 Registriert: 15.07.2011 ACA2020 Windows10
|
erstellt am: 21. Sep. 2012 17:03 <-- editieren / zitieren --> Unities abgeben: Nur für Niggemann
Hallo, mit dem, in eine Datei schreiben, wieder einlesen und auswerten könnte sich vielleicht auch ein direkter Zugriff auf eine Excel-Datei lohnen. ------------------ Gruß Wolfgang Alias: Rabbit007 und Wolli1 die aus unerklärlichen Gründen aus dem System hier gelöscht wurden. 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: 22. Sep. 2012 00:33 <-- editieren / zitieren --> Unities abgeben:
@ Jörn, Dein Vorschlag nutze ich schon länger in anderen Programmen, klappt auch super. In meinem Fall lese ich eine Zeile und Wete sie aus, dort stehen zB. $MODEL kommt dieses Wort weis ich das die nächsten Zeilen alle Daten für das Model haben und diese Zeilen sehen dann eben so aus: ("350020" "35" "Test" ....) ("350021" "35" "Test" ....) Dann kann wieder eine Zeile mit dem Wort $??? kommen und die folgenden Zeilen werden nach einander abgearbeitet. Um deine Idee um zu setzen müste ich meine Ausgabe Funktion komplett ändern was ich nur ungerne machen möchte, sie läuft ja schon seit Jahren Fehler frei. @Thomas, (vlax-invoke FILESTREAM "ReadLine") oder (read-line FILENAME) geben "(\"350020\" \"35\" \"Test\" ....)" zurück. Lese ich eine Zeile mit (setq ZEILE (read-line FILENAME)) und mit (read ZEILE) gibt eben ("350020" "35" "Test" ....) zurück womit ich direkt auf ein Listenelement mittels (nth 1 Liste) = "35" zugreifen und diesen Wert verarbeiten kann. Das ist da was ich möchte nur read kann eben nicht soviele Zeichen lesen. @Wolfgang, ja könnte man machen aber wie oben beschrieben ist es für mich dann sehr Aufwendig. So eine Textdatei kann man schnell per Email verschicken und der Empfänger kann sie einfach einlesen. Das klapp schon seit Jahren Fehlerfrei deshalb möchte ich das auch so beibehalten. Gruß Niggemann 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: 15. Nov. 2012 23:56 <-- editieren / zitieren --> Unities abgeben:
|
Meldin Mitglied
Beiträge: 398 Registriert: 15.07.2011 ACA2020 Windows10
|
erstellt am: 16. Nov. 2012 18:42 <-- editieren / zitieren --> Unities abgeben: Nur für Niggemann
Hallo, und wie siehts mit read-char und write-char aus vielleich ist so mehr möglich. ------------------ Gruß Wolfgang Alias: Rabbit007 und Wolli1 die aus unerklärlichen Gründen aus dem System hier gelöscht wurden. 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: 16. Nov. 2012 22:06 <-- editieren / zitieren --> Unities abgeben:
Hallo Wolfgang, read-char kann mehr habe ich aber nicht ausgetestet. Für meine Anwendung habe ich mir Steuerzeichen gesetzt und kann so über read-line die Daten einlesen, dieses ist für mich einfacher. Gruß Niggemann Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Andreas Kraus Mitglied Elektrotechniker
Beiträge: 1455 Registriert: 11.01.2006 WIN 10 ACAD 2022 BricsCAD V23
|
erstellt am: 18. Nov. 2012 20:44 <-- editieren / zitieren --> Unities abgeben: Nur für Niggemann
Hallo Niggemann, ich schreibe auch schon seit Jahren Daten in Listen die ich in Textdateien schreibe und (jetzt kommts) mit LOAD wieder einlese. Der Inhalt der Textdatei muß nut um eine Klammer und das Wort quote ergänzt werden. Klammer am Dateiende wieder schließen nicht vergessen. Die Textdatei sieht also z.B. so aus: (quote ( (("test-1" "test-2" "test-3" "test-4") ("test-a" "test-b" "test-c" "test-d")) (("test-5" "test-6" "test-7" "test-8") ("test-e" "test-f" "test-g" "test-h")) ) ) Ich hatte mit der Methode bisher noch keine Probleme hab aber so lange Zeichenketten noch nicht getestet. Probiers einfach aus, vielleicht hilfts ja. Edit... Eben hab ich das hier noch gelesen:
Zitat: So eine Textdatei kann man schnell per Email verschicken und der Empfänger kann sie einfach einlesen. Das klapp schon seit Jahren Fehlerfrei deshalb möchte ich das auch so beibehalten.
Hm... das geht mit einer solchen Liste natürlich nicht. Schade. Aber vielleicht fällt mir noch was ein. ------------------ Geht nicht, gibts nicht Gruß Andreas http://kraus-cad.de [Diese Nachricht wurde von Andreas Kraus am 18. Nov. 2012 editiert.] 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: 19. Nov. 2012 21:24 <-- editieren / zitieren --> Unities abgeben:
Hallo Andreas, die Idee ist super und sollte auch klappen, "quote" ist halt das Zauberwort. Mit "load" kannst du ja auch Lisp-Programme mit etlichen KB laden somit auch meine 30.000 Ascii Zeichen. Mein Prog stammt noch aus ACAD10 DOS da habe ich aus Speichergünden eben eine Zeile gelesen und diese abgearbeitet usw. und nicht alles geladen, was heute ja etwas anders ist. Was das verschicken angeht, die Textdateien werden mit Lisp erstellt und von dem selben Lisp auf einem anderen Rechner wieder gelesen somit also kein Problem. Beim nächsten mal werde ich es ausprobieren, jetzt ändere ich mein Prog nicht mehr. Nochmal Danke für deinen Tipp. Gruß Niggemann Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |