| |
 | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Creo |
| |
 | HPE ProLiant Summer Academy 2025 in Wien, eine Veranstaltung am 17.09.2025
|
Autor
|
Thema: LISP: String nicht abgeschlossen (1314 mal gelesen)
|
holt Mitglied Systembetreuer CAD
  
 Beiträge: 720 Registriert: 07.08.2003 Lenovo ThinkStation P360 Core i7-12700@2.10 GHz, 32GB NVIDIA RTX A2000 12 GB Creo Elements/Direct Modeling 20.5 Creo Elements/Direct Drafting 20.5 Creo Elements/Direct ModelManager 20.5
|
erstellt am: 23. Jan. 2008 13:31 <-- editieren / zitieren --> Unities abgeben:         
Hallo, wir haben aktuell ein Performance-Problem bei neueren Notebooks und haben beschlossen, bei diesen Geräten ein paar Grafikeinstellungen in Modeling und 3D-Access umzustellen, damit die Leistung akzeptabel ist. Dazu möchte ich in der sd_customize abfragen, welche Grafikkarte verwendet wird:
Code: ;; Funktion zum ermitteln der Grafikkarte (defun get-graphics-string() (let ((s (open (format nil "| cscript /nologo \"~a\\..\\startup\\graphik.vbs\"" (oli::sd-sys-getenv "SDCORPCUSTOMIZEDIR")) :direction :input))) (read-line s nil) ) );; Grafikvorgaben bei bestimmten Grafikkarten umstellen (if (or (oli::sd-string= "Quadro NVS 130" (get-graphics-string)) (oli::sd-string= "GeForce Go 6600" (get-graphics-string))) (progn (set_dynamic_redraw_mode :shaded) (set_dynamic_redraw_mode :clip-no-caps) (set_displaylist_mode :On) ) )
Eigenartigerweise findet der Code nie eine Übereinstimmung mit den Vergleichs-Strings. Grund: Der Rückgabewert des Scripts hat kein abschließendes Anführungszeichen ("). Ausgabe von (pprint (get-graphics-string)) z.B.: "Quadro NVS 130 Was hab ich bloß da wieder falsch gemacht? ------------------ Gruß aus dem Salzkammergut Thomas Hollerweger 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. Jan. 2008 13:59 <-- editieren / zitieren --> Unities abgeben:          Nur für holt
Meine Vermutung: Das Skript produziert eine Ausgabe mit DOS-Zeilenenden. Hier steht, wie man die los wird. Ansonsten ein Vorschlag fuer eine alternative und robustere Vorgehensweise: Statt die Einstellungen am Namen der Grafikkarte festzumachen, wuerde ich beim ersten Hochfahren kurz die Performance testen und dann anhand der gemessenen Leistung mithilfe von Vergleichswerten die passenden Einstellungen machen. Auf diese Weise musst Du dem Code nicht jedesmal hinterherrennen, nur weil irgendjemand in der Abteilung einen neuen Laptop bekommen hat oder seine alte Grafikkarte die Graetsche gemacht hat. Claus ------------------ CoCreate OneSpace Modeling FAQ: http://www.clausbrod.de/OneSpaceModeling/
[Diese Nachricht wurde von clausb am 23. Jan. 2008 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
der_Wolfgang Moderator Tastenhauer
     
 Beiträge: 2296 Registriert: 3.20. ● PE60+80@home ● W10 Pro Build10.0.19045.5737 ● Drafting V17~V20.7@job ● Modeling V17~V20.7@job ● Windchill 12.1.2.6@job ● UWGM Client 13.0.0.1@job ● Taschenrechner ● Stift+Zettel V8.42
|
erstellt am: 23. Jan. 2008 23:31 <-- editieren / zitieren --> Unities abgeben:          Nur für holt
|
holt Mitglied Systembetreuer CAD
  
 Beiträge: 720 Registriert: 07.08.2003 Lenovo ThinkStation P360 Core i7-12700@2.10 GHz, 32GB NVIDIA RTX A2000 12 GB Creo Elements/Direct Modeling 20.5 Creo Elements/Direct Drafting 20.5 Creo Elements/Direct ModelManager 20.5
|
erstellt am: 24. Jan. 2008 08:04 <-- editieren / zitieren --> Unities abgeben:         
Juhu, es funktioniert! @ Claus: Ich habe meinen Code ursprünglich von deinem Makro übernommen aber nicht begriffen, was da passiert. Daher habe ich die Zeile mit dem read-line verstümmelt übernommen. Kannst du mir im einzelnen erklären, was in deinem Code passiert? @ Wolfgang: string-trim ist meiner Meinung nach die leichter lesbare Variante, also werd ich diese Funktion nehmen (tut mitr leid, Claus ). Es soll ja auch in Zukunft jemand begreifen, was ich damit bezwecken wollte. Danke euch beiden! Ich gebe eine Thread-Runde Us aus! Nochmal @ Claus: Wie kann man beim Start der Applikation auf einfache Weise die Performance ermitteln, ohne ein Modell zu laden, ...? Oder meinst du alles manuell ermitteln und einstellen? Das hätte den entscheidenden Nachteil, dass es erstens sehr viel Arbeit ist (bei 100 3D-Lizenzen) und außerdem kann dann die sd_customize nicht überall gleich sein. ------------------ Gruß aus dem Salzkammergut Thomas Hollerweger 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: 24. Jan. 2008 08:14 <-- editieren / zitieren --> Unities abgeben:          Nur für holt
Zitat: Original erstellt von holt: Ich habe meinen Code ursprünglich von deinem Makro übernommen aber nicht begriffen, was da passiert. Daher habe ich die Zeile mit dem read-line verstümmelt übernommen. Kannst du mir im einzelnen erklären, was in deinem Code passiert?
Zeile fuer Zeile wird in einer Schleife eingelesen (kannst Du Dir in Deinem Fall sparen), in jeder wird mit Code: (remove #\Return l)
das unpassende Zeilenende entfernt. So kompliziert? Zitat:
Wie kann man beim Start der Applikation auf einfache Weise die Performance ermitteln, ohne ein Modell zu laden, ...?
Ich wuerde ein Modell laden und das dann automatisch ausmessen. Das aber nur einmal pro Workstation. Wenn Ihr Eure Anpassungen zentral verwaltet, liesse sich das gut organisieren.
------------------ CoCreate OneSpace Modeling FAQ: http://www.clausbrod.de/OneSpaceModeling/ Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
holt Mitglied Systembetreuer CAD
  
 Beiträge: 720 Registriert: 07.08.2003 Lenovo ThinkStation P360 Core i7-12700@2.10 GHz, 32GB NVIDIA RTX A2000 12 GB Creo Elements/Direct Modeling 20.5 Creo Elements/Direct Drafting 20.5 Creo Elements/Direct ModelManager 20.5
|
erstellt am: 24. Jan. 2008 12:28 <-- editieren / zitieren --> Unities abgeben:         
Zitat: Original erstellt von clausb: So kompliziert?
Für mich schon! Wie kann z.b. remove Strings verarbeiten, wenn es eine Liste erwartet? Daher bekomme ich bei folgendem Codefragment immer die Fehlermeldung "Quadro FX 1500[]" is not of type LIST. (wobei [] ein Quadrat sein soll)
Code: (setf l (read-line s nil)) (remove #\Return l) (close s)
------------------ Gruß aus dem Salzkammergut Thomas Hollerweger 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: 24. Jan. 2008 13:22 <-- editieren / zitieren --> Unities abgeben:          Nur für holt
|
holt Mitglied Systembetreuer CAD
  
 Beiträge: 720 Registriert: 07.08.2003 Lenovo ThinkStation P360 Core i7-12700@2.10 GHz, 32GB NVIDIA RTX A2000 12 GB Creo Elements/Direct Modeling 20.5 Creo Elements/Direct Drafting 20.5 Creo Elements/Direct ModelManager 20.5
|
erstellt am: 24. Jan. 2008 13:53 <-- editieren / zitieren --> Unities abgeben:         
OK, jetzt kommt bei mir auch keine Fehlermeldung, ich hatte einen Fehler beim Aufruf der Funktion. Aber dem String fehlt immer noch das abschließende ". Anbei der entsprechende Ausschnitt aus der sd_customize. Dein obiger Link funktioniert übrigens nicht. ------------------ Gruß aus dem Salzkammergut Thomas Hollerweger 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: 24. Jan. 2008 13:58 <-- editieren / zitieren --> Unities abgeben:          Nur für holt
Der Link ist jetzt korrigiert. Der String veraendert sich nicht, weil, nun ja, Du ihn nicht veraenderst  (remove) veraendert naemlich nicht die Eingabe, sondern liefert einen veraenderten String als Resultat. Das aber hast Du nirgends verwendet. Leicht vereinfachter und ungetesteter Codevorschlag: Code:
(defun get-graphics-string() (with-open-file (s "| cscript /nologo foo/bla/graphik.vbs" :direction :input) (remove #\Return (read-line s nil))))
------------------ CoCreate OneSpace Modeling FAQ: http://www.clausbrod.de/OneSpaceModeling/ Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
holt Mitglied Systembetreuer CAD
  
 Beiträge: 720 Registriert: 07.08.2003 Lenovo ThinkStation P360 Core i7-12700@2.10 GHz, 32GB NVIDIA RTX A2000 12 GB Creo Elements/Direct Modeling 20.5 Creo Elements/Direct Drafting 20.5 Creo Elements/Direct ModelManager 20.5
|
erstellt am: 24. Jan. 2008 13:59 <-- editieren / zitieren --> Unities abgeben:         
Zitat: Original erstellt von holt: Aber dem String fehlt immer noch das abschließende ".
Kommando zurück! Ich muss den input-stream erst schließen und dann das remove ausführen, dann gehts! Also:
Code: (setf l (read-line s nil)) (close s) (remove #\Return l)
------------------ Gruß aus dem Salzkammergut Thomas Hollerweger Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
holt Mitglied Systembetreuer CAD
  
 Beiträge: 720 Registriert: 07.08.2003 Lenovo ThinkStation P360 Core i7-12700@2.10 GHz, 32GB NVIDIA RTX A2000 12 GB Creo Elements/Direct Modeling 20.5 Creo Elements/Direct Drafting 20.5 Creo Elements/Direct ModelManager 20.5
|
erstellt am: 24. Jan. 2008 14:05 <-- editieren / zitieren --> Unities abgeben:         
Claus war wieder einmal schneller. Außerdem ist meine Aussage oben nicht korrekt. Durch die Änderung der Reihenfolge habe ich nur bewirkt, dass das Ergebnis von (remove) gleich als Rückgabewert der Funktion verwendet wird. Vorher habe ich nach dem (close) nochmal l als Rückgabewert übergeben. Das ist mir erst mit deiner Antwort klar geworden. Danke! Nochmal 10 Us! ------------------ Gruß aus dem Salzkammergut Thomas Hollerweger Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |