Aller au contenu

Besoin d'aide je suis débutant


jlbourbeau

Messages recommandés

Bonjour à tous,

 

Je suis nouveau sur CADxp, je prend la chance de vous exposé mon problème.

 

J'ai reprit un lisp et changer les chemins. mais j'ai une "Erreur : type d'argument incorrect: stringp nil"

 

le lisp est supposé aller chercher le profile et le charger. et le chemin est bien écrit.

 

merci, de me donner un coup de main avec ceci.

 

 

;;===========code start============

(prompt "\nType LoginProfile to run......")
(vl-load-com)
(defun C:LoginProfile (/ profilename acadprofiles actprofile thelist profilepath)
 ;;retrieve the users login name
 (setq profilename (strcase (getvar "NEUF_2018")))
 ;;retrieve a reference to the Profiles
 (setq acadprofiles
        (vla-get-profiles
          (vla-get-preferences (vlax-get-Acad-Object))
        )
 )
 ;;retrieve the Active Profile
 (setq actprofile (strcat (vla-get-ActiveProfile acadprofiles)))
 ;;if they are not the same
 (if (/= profilename actprofile)
   ;;do the following
   (progn
     ;;get a list of the loaded profiles
     (vlax-invoke-method acadProfiles 'GetAllProfileNames 'thelist)
     ;;convert to a list
     (setq thelist (vlax-safearray->list thelist))
     ;;if the profile is not in the list
     (if (not (member profilename thelist))
       ;;do the following
       (progn
         ;;store the profile file
         (setq profilepath
                (strcat "\\architecture.local\NEUF\Outils\Y-Système\Y1-Autocad\2018\Y14-Routines\NEUF_2018_ARG\Deploy_2018"
                        profilename
                        ".arg"
                )
         )
         ;;if the profile is found
         (if (findfile profilepath)
           ;;do the following
           (progn
             ;;load the profile
             (setq NewProfile
                    (vlax-invoke-method
                      acadprofiles 'ImportProfile profilename profilepath :vlax-true)
             )
             ;;make the profile the Active Profile
             (vla-put-ActiveProfile acadProfiles profilename)
           ) ;_ progn
           ;;profile file cannot be found - exit
           (prompt (strcat "\nCannot find profile " profilepath))
         ) ;_ if
       ) ;_ progn
       ;;it is loaded but make the profile the Active Profile
       (vla-put-ActiveProfile acadProfiles profilename)
     ) ;_ if

   ) ;_ progn

   ;;We could reload the Profile if we wish.
   ;;Just uncomment the next line.
   ;;(vlax-invoke-method acadProfiles 'ResetProfile profilename)
 ) ;_ if
 (princ)
) ;_;defun
(princ)

;;========== end code===========

Modifié par (gile)
formatage du code (bbcode)
Lien vers le commentaire
Partager sur d’autres sites

en tant que grand débutant je me permet une tentative de solution

 

à la ligne de commande j'ai fait ça:

Commande: (setq profilename "toto")

"toto"

Commande: (strcat "\\architecture.local\NEUF\Outils\Y-Système\Y1-Autocad\2018\Y14-Routines\NEUF_2018_ARG\Deploy_2018" profilename ".arg")

"\\architecture.localNEUFOutilsY-SystèmeY1-Autocad8Y14-RoutinesNEUF_2018_ARGDeploy_2018toto.arg"

 

je suis pas sur que c'est ce que tu veux, il manque un \ au chemin...

mais bon... à voir...car la string n'est pas nill

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

En LISP (comme dans de nombreux autres langages de programmation) la barre oblique inversée ou anti-slash (\) est un caractère d’échappement.

Dans les chemins de fichier il faut donc le doubler (\\) ou le remplacer par une barre oblique ou slash (/).

Par ailleurs, ton chemin ne me semble pas valide : il manque le nom du lecteur au début

 

Remplace :

"\\architecture.local\NEUF\Outils\Y-Système\Y1-Autocad\2018\Y14-Routines\NEUF_2018_ARG\Deploy_2018"

Par :

"C:\\architecture.local\\NEUF\\Outils\\Y-Système\\Y1-Autocad\\2018\\Y14-Routines\\NEUF_2018_ARG\\Deploy_2018\\"

en changeant la lettre du lecteur (C:) au besoin.

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Lien vers le commentaire
Partager sur d’autres sites

 

Par ailleurs, ton chemin ne me semble pas valide : il manque le nom du lecteur au début

 

 

Pas sûr, il fait appel au nom réseau de son ordi (\\architecture.local) et au dossier partagé (\NEUF)

Du coup faut-il tripler les premiers "\" pour avoir au final "\\"

Autodesk Expert Elite Member

Lien vers le commentaire
Partager sur d’autres sites

Pas sûr, il fait appel au nom réseau de son ordi (\\architecture.local) et au dossier partagé (\NEUF)

Du coup faut-il tripler les premiers "\" pour avoir au final "\\"

Si c'est le cas, il faut les quadrupler (doubler chacun).

"\\\\architecture.local\\NEUF\\Outils\\Y-Système\\Y1-Autocad\\2018\\Y14-Routines\\NEUF_2018_ARG\\Deploy_2018\\"

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Lien vers le commentaire
Partager sur d’autres sites

Salut.

Du coup faut-il tripler les premiers "\" pour avoir au final "\\"

 

Non, il faut le quadrupler. L'anti-slash annule uniquement la fonction du caractère suivant. Pour avoir deux caractérs "Anti_slash" effectifs, il faut donc annuler deux fois un anti-slash avec un autre anti-slash : \\\\

 

Ce ne serait pas plus simple d'utiliser juste deux slashs : // ?

 

Cordialy.

 

EDIT : Grillé.

 

Quelle orgueil d'avoir voulu couper l'herbe sous le pied de notre Maître (gile). Je m'excuse platement de mon arrogance et vais à l'avenir arrêter de braconner sur vos terre, Maître. laugh.gif

Je suis dysorthographique alors lâchez-moi les basques avec ça, je fait déjà de mon mieux.
Membre d'Extinction Rebellion, car pour sauver le monde il n'est jamais trop tard, amour et rage !
Pour écrire un vraie point médian (e·x·e·m·p·l·e) [Alt + 0183] ou ajout d'un raccourci clavier personnalisé (ex. [AltGr + ;])

Utilisateur d'AutoCAD 2021 sous Windows 10

Lien vers le commentaire
Partager sur d’autres sites

Je tiens a vous remercier pour vo tentative. Le problème est toujours le même avec :

 

(prompt "\nType LoginProfile to run......")
(vl-load-com)
(defun C:LoginProfile (/ profilename acadprofiles actprofile thelist profilepath)
 ;;retrieve the users login name
 (setq profilename (strcase (getvar "NEUF_2018")))
 ;;retrieve a reference to the Profiles
 (setq acadprofiles
		(vla-get-profiles
  		(vla-get-preferences (vlax-get-Acad-Object))
		)
 )
 ;;retrieve the Active Profile
 (setq actprofile (strcat (vla-get-ActiveProfile acadprofiles)))
 ;;if they are not the same
 (if (/= profilename actprofile)
   ;;do the following
   (progn
     ;;get a list of the loaded profiles
     (vlax-invoke-method acadProfiles 'GetAllProfileNames 'thelist)
     ;;convert to a list
     (setq thelist (vlax-safearray->list thelist))
     ;;if the profile is not in the list
     (if (not (member profilename thelist))
       ;;do the following
       (progn
         ;;store the profile file
         (setq profilepath
    			(strcat "\\\\architecture.local\\NEUF\\Outils\\Y-Système\\Y1-Autocad\\2018\\Y14-Routines\\NEUF_2018_ARG\\Deploy_2018\\"
            			profilename
            			".arg"
    			)
         )
         ;;if the profile is found
         (if (findfile profilepath)
           ;;do the following
           (progn
             ;;load the profile
             (setq NewProfile
        			(vlax-invoke-method
          			acadprofiles 'ImportProfile profilename profilepath :vlax-true)
             )
             ;;make the profile the Active Profile
             (vla-put-ActiveProfile acadProfiles profilename)
           ) ;_ progn
           ;;profile file cannot be found - exit
           (prompt (strcat "\nCannot find profile " profilepath))
         ) ;_ if
       ) ;_ progn
       ;;it is loaded but make the profile the Active Profile
       (vla-put-ActiveProfile acadProfiles profilename)
     ) ;_ if
   ) ;_ progn
   ;;We could reload the Profile if we wish.
   ;;Just uncomment the next line.
   (vlax-invoke-method acadProfiles 'ResetProfile profilename)
 ) ;_ if
 (princ)
) ;_;defun
(princ)

 

J'ai même testé tout ramené sur mon bureau le arg et refaire le chemin vers celui du bureau sa bonne le meme résultat

 (setq profilepath (strcat "C:\\Users\\jlbourbeau\\Desktop\\" profilename ".arg"))

Lien vers le commentaire
Partager sur d’autres sites

L'erreur : "Erreur : type d'argument incorrect: stringp nil" vient de l'expression :

(setq profilename (strcase (getvar "NEUF_2018")))

Cette expression -qui pourrait être réduite à : (setq profilename (getvar "NEUF_2018"))- suppose qu'il y ait une variable système nommée "NEUF_2018", or, à ma connaissance, il n'existe aucune variable de ce nom, donc soit ce LISP est prévu pour fonctionner avec une application ObjectARX ou .NET qui définirait une telle variable système ; soit il n'a jamais pu fonctionner en l'état.

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Lien vers le commentaire
Partager sur d’autres sites

ha je me marre en vous lisant..

d'abord car j'avais pas tout faux, quoi que si j’avais remarqué le dernier \ j'en quand même oublier un bon paquet... et des quadruples paquets en plus.

Et puis Alex, tu m'a fait bien rire...

 

pour le coup moi aussi je suis bien forcé de constater que le débat vole dans des cieux que je ne peut que regarder d'en bas... un pauvre terrestre qui regarde les oiseaux...

(gile) vole! La vedette.

 

et puis tien, j'en tente une...

et s'il suffisait de déclarer la variable?

apparemment le bousin cherche à repérer si un. arg est déjà connu. jlbourbeau sais peut être ce qu'il cherche?

Lien vers le commentaire
Partager sur d’autres sites

Un gros merci. le stringp est corriger une dernière question j'ai l'erreur suivant "erreur: caractère lu incorrect (octal): 30" je ne pense pas que c'est du au code mais sa arrive après avoir charger les DLL personnaliser pour le bureau.

 

Voici le code corriger

(prompt "\nType LoginProfile to run......")
(vl-load-com)
(defun C:LoginProfile (/ profilename acadprofiles actprofile thelist profilepath)
 ;;retrieve the users login name
 (setq profilename (strcase"NEUF_2018"))
 ;;retrieve a reference to the Profiles
 (setq acadprofiles
        (vla-get-profiles
          (vla-get-preferences (vlax-get-Acad-Object))
        )
 )
 ;;retrieve the Active Profile
 (setq actprofile (strcat (vla-get-ActiveProfile acadprofiles)))
 ;;if they are not the same
 (if (/= profilename actprofile)
   ;;do the following
   (progn
     ;;get a list of the loaded profiles
     (vlax-invoke-method acadProfiles 'GetAllProfileNames 'thelist)
     ;;convert to a list
     (setq thelist (vlax-safearray->list thelist))
     ;;if the profile is not in the list
     (if (not (member profilename thelist))
       ;;do the following
       (progn
         ;;store the profile file
         (setq profilepath
                (strcat "\\\\architecture.local\\NEUF\\Outils\\Y-Système\\Y1-Autocad\\2018\\Y14-Routines\\NEUF_2018_ARG\\Deploy_2018\\"
                        profilename
                        ".arg"
                )
         )
         ;;if the profile is found
         (if (findfile profilepath)
           ;;do the following
           (progn
             ;;load the profile
             (setq NewProfile
                    (vlax-invoke-method
                      acadprofiles 'ImportProfile profilename profilepath :vlax-true)
             )
             ;;make the profile the Active Profile
             (vla-put-ActiveProfile acadProfiles profilename)
           ) ;_ progn
           ;;profile file cannot be found - exit
           (prompt (strcat "\nCannot find profile " profilepath))
         ) ;_ if
       ) ;_ progn
       ;;it is loaded but make the profile the Active Profile
       (vla-put-ActiveProfile acadProfiles profilename)
     ) ;_ if
   ) ;_ progn
   ;;We could reload the Profile if we wish.
   ;;Just uncomment the next line.
   (vlax-invoke-method acadProfiles 'ResetProfile profilename)
 ) ;_ if
 (princ)
) ;_;defun
(princ)

Lien vers le commentaire
Partager sur d’autres sites

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité