DenisHen Posté(e) le 19 mars 2015 Posté(e) le 19 mars 2015 Bonjour à tous, Voilà, j'ai un soucis avec des LiSP et leurs commandes... Je suis "presque" nouveau dans la boite (1 an et demi d'ancienneté) et je récupère du boulo qu'un autre avait automatisé. Seulement, celui qui a créé ces centaines de LiSP n'est plus là. Je cherche les fichiers LiSP (plus de 150) contenant des tonnes de commandes chacuns... Existe-il un Lisp (ou un autre moyen) de lister les commandes et de lister les LiSP qui les contient ? En gros, j'ai des centaines de commandes et je ne sais absolument pas dans quel LiSP elles se trouvent... Je pense qu'il doit il y avoir un moyen de faire un tableau Excel avec VBA, mais avant de me lancer là dedans, je me renseigne si quelqu'un a déjà fait quelque chose... Merci d'avance, Denis... Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
Patrick_35 Posté(e) le 19 mars 2015 Posté(e) le 19 mars 2015 Salut Tu as songé à faire une recherche avec un type de fichier (*.lsp) et contenant le texte "command" ? @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
DenisHen Posté(e) le 19 mars 2015 Auteur Posté(e) le 19 mars 2015 Bonjour Patrick_35, Je pensais plus à des commandes "Defun", avec une liste claire des commandes "Defun" et une correspondance avec son fichier LiSP... Mais c'est une bonne idée. Merci à toi, Denis... Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
Steven Posté(e) le 19 mars 2015 Posté(e) le 19 mars 2015 Salut, J'avais fais une demande pour lister mes lisps au démarage et justement, Patrick_35 avait trouvé la solution :)C'est peut-être une piste. Steven________________________________________ Pour le taf; Windows (et ses emmerdes) sinon pas d'AutoCAD. Pour le perso Linux Mint et pas de problèmes. Mais pas d'AutoCAD. En rêve; AutoCAD sous Linux.
DenisHen Posté(e) le 19 mars 2015 Auteur Posté(e) le 19 mars 2015 Salut, Merci de me répondre Steven, mais le LiSP de Patrick_35 donne la liste des LiSP chargés au démarage d'AutoCAD, il me faudrait aussi les commandes qui y sont incluses. Je songeais à un LiSP qui donnerais un truc dans ce style :Fichier LiSP : crnMapTrans.lip contient les commandes : CrnMap CrnTrans Fichier LiSP : crnControleSemafor773.lsp contient les commandes : CrnCtrlSemA Crn.... .... Mais je pense que je vais m'orienté vers un .XLSM. Denis... Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
(gile) Posté(e) le 19 mars 2015 Posté(e) le 19 mars 2015 Salut, Tu peux essayer ListLispCmds qui retourne le chemin du fichier .csv spécifié dans lequel sont listées toutes les commandes LISP (defun c:...) chargées dans le dessin avec le fichier dans lequel elles sont définies. (vl-load-com) ;; gc:str2lst ;; Transforme un chaine avec séparateur en liste de chaines ;; ;; Arguments ;; str : la chaîne ;; sep : le séparateur (defun gc:str2lst (str sep / pos) (if (setq pos (vl-string-search sep str)) (cons (substr str 1 pos) (gc:str2lst (substr str (+ (strlen sep) pos 1)) sep) ) (list str) ) ) ;; gc:GetSupportFileSearchPaths ;; Retourne la liste des chemins de recherche des fichiers de support (defun gc:GetSupportFileSearchPaths () (gc:str2lst (vla-get-SupportPath (vla-get-Files (vla-get-Preferences (vlax-get-acad-object) ) ) ) ";" ) ) ;; gc:GetSupportLispFiles ;; Retourne la liste de tous les fichiers LISP dans les chemins de support (defun gc:GetSupportLispFiles () (apply 'append (mapcar (function (lambda (d) (mapcar (function (lambda (f) (strcat d "\\" f))) (vl-directory-files d "*.lsp" 1) ) ) ) (gc:GetSupportFileSearchPaths) ) ) ) ;; gc:GetLoadedLispCmd ;; Retourne la liste des noms de commandes définies en LISP chargées dans le dessin (defun gc:GetLoadedLispCmd () (vl-remove-if-not (function (lambda (s) (= (substr s 1 2) "C:"))) (atoms-family 1) ) ) ;; ListLispCmds ;; Liste les commandes LISP chargées (defun ListLispCmds (/ loaded result file line csv sel) (setq loaded (gc:GetLoadedLispCmd)) (foreach f (gc:GetSupportLispFiles) (setq file (open f "r")) (while (setq line (read-line file)) (foreach cmd (vl-remove-if-not (function (lambda (s) (member (strcase s) loaded))) (gc:str2lst line " ") ) (or (member (cons (strcase cmd) f) result) (setq result (cons (cons (strcase cmd) f) result)) ) ) ) (close file) ) (if (setq csv (getfiled "Fichier de sortie" "" "csv" 1)) (progn (setq sep (vl-registry-read "HKEY_CURRENT_USER\\Control Panel\\International" "sList") file (open csv "w")) (foreach cmd result (write-line (strcat (car cmd) sep (cdr cmd)) file) ) (close file) ) ) csv ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
DenisHen Posté(e) le 19 mars 2015 Auteur Posté(e) le 19 mars 2015 Bonjour à tous... Merci (gile) mais entre midi et deux, j'ai bidouillé un truc en VBA. Il liste tous les LiSp d'un répertoire et il cherche à l'intérieur de chacun d'entre eux les commandes LiSP (les "defun c:"). Je sais que ça ne fait pas exactement ce que j'espérais, mais je ne sais pas le faire... Voici le Code VBA pour ceux que ça peut intéressé : Sub ListeCommandeLsp() Dim Fichiers As String, Commande As String, StrFichier As String Dim LTableau As Integer, NbCommand As Integer Dim objShell As Object, objFolder As Object, oFolderItem As Object Dim Chemin As String, Tableau() As String Set objShell = CreateObject("Shell.Application") Set objFolder = objShell.BrowseForFolder(&H0&, "Choisir un répertoire", &H1&) Set FSO = CreateObject("Scripting.FileSystemObject") On Error Resume Next Set oFolderItem = objFolder.Items.Item Chemin = oFolderItem.Path Fichiers = Dir(Chemin & "\*.lsp") Do While Len(Fichiers) > 0 LTableau = LTableau + 1 ReDim Preserve Tableau(1 To LTableau) Tableau(LTableau) = Fichiers Fichiers = Dir() Loop For i = 0 To UBound(Tableau) X = i For K = X + 1 To UBound(Tableau) If Tableau(K) <= Tableau(X) Then X = K Next K If i <> X Then ValTemp = Tableau(X): Tableau(X) = Tableau(i): Tableau(i) = ValTemp End If Next i StrFichier = Chemin & "\_ListeCommandeLiSP.txt" FSO.DeleteFile StrFichier, True Open StrFichier For Output As #2 For a = 1 To UBound(Tableau) Open Chemin & "\" & Tableau(a) For Input As #1 Print #2, Tableau(a) Do While Not EOF(1) Line Input #1, chaine$ chaine$ = Trim(chaine$) If InStr(UCase(chaine$), "(DEFUN C:") <> 0 And Left(chaine$, 1) <> ";" Then Commande = Right(chaine$, Len(chaine$) - 9): NbCommand = NbCommand + 1 If Left(Commande, 1) <> "-" And Left(Commande, 1) <> "+" Then Print #2, " " & Commande End If Loop Print #2, "--------" Close #1 Next Close MsgBox " Il y a " & NbCommand & " dans " & a & " fichiers LiSP..." Shell "NOTEPAD.EXE """ & StrFichier & """", vbNormalFocus End Sub Mais j'enregistre tout de même ton LiSP (gile), histoire de regarder comment ça fonctionne... Pour la petite histoire, mon prédécesseur avait 263 commandes dans 144 fichiers LiSP... J'ai bien fais de faire une macro, j'ai retrouvé mes petits... Enfin, plutôt les siens... Denis... Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
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