Olivier_CEA_Grenoble Posté(e) le 15 juillet 2015 Posté(e) le 15 juillet 2015 Bonjour a tous, Je bloque sous SAS pour ce qui est de la récupération de fichiers pour notre nouvel environnement de gestion documentaire.(M-files) Je pose le problème: Environnement:Autocad MAP 2008 :(Une base de données SQL de gestion patrimonialGEOMAP qui fait la liaisons Autocad MAP => BDD SQL Des fichiers avec cartouche comportant les noms de bâtiments en gestion qui sont parfois mal orthographié:TO-TO pour le bâtiment TOTOCe qui fait que j'ai besoins de les vérifier dans notre base gestion patrimoniale. La dénomination des fichiers qui comprend les autres multis références dont nous avons besoins pour la gestion:C_0504_120975_C.DWG la séparation "_" nous permet de définir les types, le NumGestdoc, NumEAM qui sont nos différents ref. J'ai développer un lisp qui fonctionne de façons unitaire sous l’environnement GEOMAP, mais impossible de le faire fonctionner au delà du premier fichier avec SAS.J'ai prêt de 800 fichiers a basculer.Plusieurs questions ce pose donc:La première, changer d’environnement et inclure un mode de connexion et de requête différent que GEOMAP dans mon lisp (mais je ne sait pas faire)La deuxième, comment indiquer a SAS l’environnement qu'il doit charger avant de lancer le lisp (je ne sais pas faire non plus)Le code(defun str2lst (str sep / pos) (if (setq pos (vl-string-search sep str)) (cons (substr str 1 pos) (str2lst (substr str (+ (strlen sep) pos 1)) sep) ) (list str) ) ) (defun c:A2M(/) (setq NameClean (substr (getvar "dwgname") 1 (- (strlen (getvar "dwgname"))4)) Lst_Dwgname (str2lst NameClean "_") LstARU '(("C" . "80")("E" . "79")) ; LstARU '(("C" . "31")("E" . "49")) GroUp (cdr(assoc (car lst_dwgname) LstARU)) Lst_Dwgname (cdr Lst_Dwgname) NumGestdoc (car lst_dwgname) Lst_Dwgname (cdr Lst_Dwgname) NumEAM (car lst_dwgname) NumEAM_dwg NumEAM Lst_Dwgname (cdr Lst_Dwgname) DeposeFich (strcat "\\\\managua\\products_data\\SFM-Converter\\Data\\DwgTempMFiles\\") DossierPrim (getvar "DWGPrefix") ) ;;_______________ Récupération des données CARTOUCHE (setq S_PDG (ssget "x"'((2 . "PDG")))) (if(/= S_PDG nil) (if(/= (sslength S_PDG) 1) (alert "Plusieurs Blocs 'PDG'") (progn (setq objPdg (ssname S_PDG 0)) (while (/= objPdg nil) (if (= (cdr(assoc 0 (entget objPdg))) "ATTRIB") (progn (if (= (cdr(assoc 2 (entget objPdg))) "BATIMENT") (setq Lst_Bat(str2lst (cdr(assoc 1(entget objPdg))) " ")) ) (if (= (cdr(assoc 2 (entget objPdg))) "TITRE1L") (setq Tl(cdr(assoc 1(entget objPdg)))) ) (if (= (cdr(assoc 2 (entget objPdg))) "TITRE1/2") (setq T12(cdr(assoc 1(entget objPdg)))) ) (if (= (cdr(assoc 2 (entget objPdg))) "TITRE2/2") (setq T22(cdr(assoc 1(entget objPdg)))) ) (if (= (cdr(assoc 2 (entget objPdg))) "TITRE1/3") (setq T13(cdr(assoc 1(entget objPdg)))) ) (if (= (cdr(assoc 2 (entget objPdg))) "TITRE2/3") (setq T23(cdr(assoc 1(entget objPdg)))) ) (if (= (cdr(assoc 2 (entget objPdg))) "TITRE3/3") (setq T33(cdr(assoc 1(entget objPdg)))) ) ) ) (setq objPdg (entnext objPdg)) ) ) ) ) (while (/= Lst_Bat nil) (if (= (car Lst_Bat ) "BATIMENT") (setq Nom_Bat (cadr Lst_Bat)) ) (setq Lst_Bat(cdr Lst_Bat)) ) (while (/= lst_dwgname nil) (if (/= (atoi(car Lst_Dwgname))0) (setq NumEAM_dwg (strcat NumEAM_dwg "_" (car Lst_Dwgname))) (setq Lst_Dwgname nil) ) (setq Lst_Dwgname (cdr Lst_Dwgname)) ) (setq SQL_Lst_BAT_BDD (strcat "select BUILDING_NAME,ID_SITE,ID_BUILDING FROM SFM_BUILDING where PJT_STATUS = 'CURRENT'") Lst_BAT_BDD(ggselrows "SFM_BUILDING" SQL_Lst_BAT_BDD) NameFich(strcat DeposeFich NumEAM_dwg "_" NumGestdoc) ) (if (/= (assoc Nom_Bat Lst_BAT_BDD) nil) (setq SFM_ID_SITE (itoa(cadr (assoc Nom_Bat Lst_BAT_BDD))) SFM_ID_BUILDING (itoa(caddr (assoc Nom_Bat Lst_BAT_BDD))) ) ) ;;___________envoie dans un fichiers XML (setq open_Nom_XML(open (strcat NameFich ".xml") "w")) (write-line (strcat "<?xml version=\"1.0\" encoding=\"utf-8\"?>") open_Nom_XML) (write-line (strcat "<document>") open_Nom_XML) (write-line (strcat " <content>") open_Nom_XML) (write-line (strcat " <Classe>" GroUp "</Classe>") open_Nom_XML) (write-line (strcat " <Auteur>" "2" "</Auteur>") open_Nom_XML) (if (/= SFM_ID_SITE nil) (progn (write-line(strcat " <Batiment>" SFM_ID_BUILDING "</Batiment>") open_Nom_XML) (write-line(strcat " <Site>" SFM_ID_SITE "</Site>") open_Nom_XML) ) (progn (write-line(strcat " <Batiment> </Batiment>") open_Nom_XML) (write-line(strcat " <Site> </Site>") open_Nom_XML) ) ) (if (/= NumEAM "XXXXXX") (write-line(strcat " <EAM>" NumEAM "</EAM>") open_Nom_XML) (write-line(strcat " <EAM></EAM>") open_Nom_XML) ) (write-line(strcat " <GESTDOC>" NumGestdoc "</GESTDOC>") open_Nom_XML) (write-line (strcat " <Titre>" NumEAM_dwg "_" NumGestdoc " </Titre> ") open_Nom_XML) (write-line (strcat " <Desc>" Tl "_" T12 "_" T22 "_" T13 "_" T23 "_" T33 " </Desc> ") open_Nom_XML) (write-line (strcat " </content>") open_Nom_XML) (write-line (strcat "</document>") open_Nom_XML) (close open_Nom_XML) (setq open_ARU_log(open (strcat DeposeFich "\\Log\\ARU.log") "a")) (write-line (strcat DossierPrim NameClean ";Transferer M-files = " NumEAM_dwg "_" NumGestdoc ";Id_type= " GroUp ";Id_Bat =" SFM_ID_BUILDING ";Nom Batiment= " Nom_Bat ";Le " (rtos(getvar "CDATE")))open_ARU_log ) (close open_ARU_log) ;;___________ Fin de l'action fichier XML (command "_SaveAs" "2007" (strcat NameFich ".DWG") "_close") ) Olivier :blink:
bonuscad Posté(e) le 15 juillet 2015 Posté(e) le 15 juillet 2015 Bonjour,J'ai développer un lisp qui fonctionne de façons unitaire sous l’environnement GEOMAP, mais impossible de le faire fonctionner au delà du premier fichier avec SAS Je pense (sans avoir testé, car il faudrait au moins un ou deux DWG pour pouvoir le faire).Mais lors d'un script, si tu veux utilisé un lisp (s'il n'est pas auto-chargé automatiquement) il te faudrait inclure le chargement de celui ci dans ton script.Par exemple(if (not (c:A2M)) (load "c:/chemin du dossier lisp/nom du fichier lisp a cargé.lsp"))et après dans ton script lancer la fonction (c:A2M) ou (command "A2M") NB: Voir s'il n'y a pas besoin aussi de la fonction (ggselrows ...) qui est absente de ton lisp.Il te faut soit l'inclure, soit la charger dans ton script si elle est indépendante de ton programme. Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
Olivier_CEA_Grenoble Posté(e) le 15 juillet 2015 Auteur Posté(e) le 15 juillet 2015 (modifié) Bonjour, Je pense (sans avoir testé, car il faudrait au moins un ou deux DWG pour pouvoir le faire).Mais lors d'un script, si tu veux utilisé un lisp (s'il n'est pas auto-chargé automatiquement) il te faudrait inclure le chargement de celui ci dans ton script.Par exemple(if (not (c:A2M)) (load "c:/chemin du dossier lisp/nom du fichier lisp a cargé.lsp"))et après dans ton script lancer la fonction (c:A2M) ou (command "A2M") NB: Voir s'il n'y a pas besoin aussi de la fonction (ggselrows ...) qui est absente de ton lisp.Il te faut soit l'inclure, soit la charger dans ton script si elle est indépendante de ton programme. Bonjour bonuscad, J'ai effectivement inclus le chargement du lisp dans le script (load "aru_mefiles")mais SAS ne charge pas l’environnement complet avant l'ouverture du fichiers. J'essais de forcer l’environnement avant la charge de aru_mfiles et je fais un retour ici. MerciOlivier :angry: Commande: (command "LoadFolder" "SFM-Réseau&Réseau interne")LoadFolder Commande inconnue "LOADFOLDER". Appuyez sur F1 pour obtenir de l'aide. Commande: SFM-Réseau&Réseau interne Commande inconnue "SFM-RESEAU&RESEAU INTERNE". Appuyez sur F1 pour obtenir de l'aide. Modifié le 15 juillet 2015 par Olivier_CEA_Grenoble
bonuscad Posté(e) le 15 juillet 2015 Posté(e) le 15 juillet 2015 Cela va être difficile de t'aider car tu es dans une configuration propre à ton activité (dossiers, lisps, dwg, etc...)donc... pour reproduire celui ci dans un autre environnement sans (en plus) aucun fichier source, cela révèle de l'impossible: Il faudrait que j'ai un œil par dessus ton épaule pour pouvoir t'aiguiller dans tes démarches. (command "LoadFolder" "SFM-Réseau&Réseau interne") Ça je ne comprends pas d'où tu sort cette syntaxe, et je ne suis pas surpris du retour:LoadFolder Commande inconnue "LOADFOLDER". Appuyez sur F1 pour obtenir de l'aide. Pour compléter ma réponse précédente, les lisp en script peuvent fonctionner (je l'ai déjà pratiqué), mais il ne faut pas qu'ils comportent des interactions avec l'utilisateur, tel que des sélections manuelle, des introductions de paramètres, de demande de nom de fichier. En résumé il faut que le lisp puisse travailler sans aucune intervention de l'utilisateur: (éviter tous les fonctions lisp comportant un (getxxx), les sélection (ssget)(ormis le (ssget"_x") (entsel) pour les principales me venant à l'esprit).A première vue, celui que tu as posté à l'air de répondre à ces conditions. Si tu veux une aide plus efficace, il faudra donner plus d'éléments, dans l'état je ne peux donner que des pistes. Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
Olivier_CEA_Grenoble Posté(e) le 15 juillet 2015 Auteur Posté(e) le 15 juillet 2015 Effectivement, le loadfolder est spécifique de la surcouche GEOMAP. Je viens de contourner le problème, pas de façons très orthodoxe, mais ça marche. je créé le script depuis SAS et le modifie par la suite en ajoutant les variables nécessaires(load "x:\\...\\acad"), qui lance le loadfolder et ainsi de suite;puis je le lance depuis l’environnement déjà en place_expert 2 _open O "x:/...../DOSSIERS/00001_119235/C_0001_119235_A.DWG" O filedia 0 (load "acad") (load "aru_mfiles") A2M _open "x:/...../DOSSIERS/00002_119734/C_0002_119734_D.DWG" O filedia 0 (load "acad") (load "aru_mfiles") A2M Remerciement a "bonuscad"
Messages recommandés
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 compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant