Aller au contenu

[RESOLU] - Nom de dossier Windows dans un champ


LElemurien

Messages recommandés

Bonjour,

 

Tapper champs

En choisissant Nom de fichier tu peux choisir des options sur la droite.

 

Merci pour la réponse,

mais je souhaiterai avoir que le nom du dossier (Alors que dans les options c'est soit le nom du fichier et/ou tout le chemin d'accès)

Est -il possible d'avoir uniquement le nom de dossier?

 

 

J'ajoute une autre une question si cela est possible d'avoir dans le champ uniquement le début ou la fin du nom de dossier Exemple :

Nom de dossier : Maison - 01

Et pour le champ j'aimerai garder si possible uniquement le mot Maison (Supprimer tout ce qui est après le 1er mot)

Peut-être un peu compliqué à faire??!!

Mais on s'est jamais

Lien vers le commentaire
Partager sur d’autres sites

Peut-être un peu compliqué à faire??!!

 

Oui, directement dans un champs.

Par contre, à la place du champs, on peut imaginer une solution de mis à jour grâce à un lisp.

Mais, ici, nous n'avons pas assez d'éléments pour le faire à ta place.

Le texte est t'il un attribut, le chemin de base est t'il toujours le même ...

Lien vers le commentaire
Partager sur d’autres sites

Oui, directement dans un champs.

Par contre, à la place du champs, on peut imaginer une solution de mis à jour grâce à un lisp.

Mais, ici, nous n'avons pas assez d'éléments pour le faire à ta place.

Le texte est t'il un attribut, le chemin de base est t'il toujours le même ...

 

Merci pour les réponses

En fait j'ai 2 questions :

 

1 - Peut on avoir avoir uniquement le nom de dossier dans un champ créer avec la commande champ? (Nom du dossier où est enregistrer le fichier dwg, le chemin d'accès est toujours le même pour accéder aux différents dossiers où il y a différents dwg enregistrer dedans)

2 - Si oui à la question 1 peut on aussi modifier ce champ en enlevant une partie du texte de ce champ?

j'espère que c'est plus compréhensible

Lien vers le commentaire
Partager sur d’autres sites

Si tu veux absolument un champ, je te propose cette solution

Le champ

%<\AcVar.17.0 Lisp.dddir>%

 

et un bout de lisp qui le met à jour.

 

(defun c:ddd nil
(setq dddir (xstrcase (car (str2lst (car (reverse (butlast (str2lst (getvar 'DWGPREFIX) "\\")))) " "))))
(command "_regen")
)

(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 butlast (lst)
 (reverse (cdr (reverse lst)))
)

 

Cela fonctionne si c'est un espace qui sépare les mots du nom de ton dossier.

Si c'est "-" par exemple remplace l'espace " " par "-"

 

j'avais oublier de joindre les 2 fonctions str2lst et butlast ...

Modifié par Fraid
Lien vers le commentaire
Partager sur d’autres sites

Si tu veux absolument un champ, je te propose cette solution

Le champ

%<\AcVar.17.0 Lisp.dddir>%

 

et un bout de lisp qui le met à jour.

 

(defun c:ddd nil
(setq dddir (car (str2lst (car (reverse (butlast (str2lst (getvar 'DWGPREFIX) "\\")))) " ")))
(command 'METTREAJOURCHAMP)
)

(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 butlast (lst)
 (reverse (cdr (reverse lst)))
)

 

Cela fonctionne si c'est un espace qui sépare les mots du nom de ton dossier.

Si c'est "-" par exemple remplace l'espace " " par "-"

 

j'avais oublier de joindre les 2 fonctions str2lst et butlast ...

 

Bonjour,

Et merci pour l'aide

Par contre j'ai un problème car quand je charge le LISP cela me retourne :

; erreur: valeur d'argument incorrecte: commande AutoCAD: METTREAJOURCHAMP

Par contre si après je fais mettre à jour champ et que je sélectionne mon champ cela fonctionne.

Vu que je ne connais pas la programmation je suis un peu perdu.

Je vais encore essayer de chercher car cela ne doit pas être grand chose je suppose.

Et pour être un peu chiant est-il possible que le champ soit automatiquement en Majuscule?

Merci en tout en cas et bon week-end!

Lien vers le commentaire
Partager sur d’autres sites

Oups, j'ai corrigé,

Un simple regen suffit.

Et c'est maintenant en majuscule

 

C'est parfait au niveau du programme.

 

Par contre j'ai un problème ou c'est peut-être normal mais j'aimerai que le champs soit à jour quand j'ouvre le dessin ou que je fasse un enregistrer sous.

Je m'explique: Si j'ai un champ dans mon 1 er dessin et que je fais un enregistrer sous dans un autre dossier je suis obligé de lancer la commande pour que le champ soit à jour (Un simple regen ne suffit pas).

Est il possible d'y remédier?

Lien vers le commentaire
Partager sur d’autres sites

Pour que le champ soit mis à jour à l'ouverture:

 

- Rajoute en fin de code

(c:ddd)

 

- Tu enregistre le code dans un fichier ddd.lsp (dans un dossier support/approuvé)

 

- l'ajouté au applications chargées au démarrage (appload)

 

Pour l'enregistrer sous, il suffit de taper ddd juste après, sinon il sera à jour à la prochaine ouverture.

Lien vers le commentaire
Partager sur d’autres sites

Pour que le champ soit mis à jour à l'ouverture:

 

- Rajoute en fin de code

(c:ddd)

 

- Tu enregistre le code dans un fichier ddd.lsp (dans un dossier support/approuvé)

 

- l'ajouté au applications chargées au démarrage (appload)

 

Pour l'enregistrer sous, il suffit de taper ddd juste après, sinon il sera à jour à la prochaine ouverture.

 

OK merci beaucoup c'est parfait!

Note à moi même : Prendre du temps pour apprendre la programmation.

Bon weekend!

Lien vers le commentaire
Partager sur d’autres sites

Prendre du temps pour apprendre la programmation.

 

Je ne peux que t'encourager.

Du coup je vais prendre un peux de temps pour expliquer ma démarche.

 

Les expressions de champs son limitées à ce qui est disponible avec la commande CHAMP.

Par bonheur, parmi elles, il y a VariableLisp.

Lorsque vous la sélectionnez, vous voyez la totalité des variables disponibles dans le panneau du milieu.

Nous allons donc simplement créer une variable interrogée par le champ.

Je vais développer le code.

 

(defun c:ddd nil ;Défini la fonction C:DDD en créant la commande Autocad DDD, et nil pour aucun argument ni variable
(setq 	dddir (getvar 'DWGPREFIX);Chemin du fichier ex "c:\\Temp\\Data du jour\\"
dddir (str2lst dddir "\\");Conversion du chemin en liste '("c:" "Temp" "Data du jour" "")
dddir (butlast dddir);Suppression du dernier élément de la liste '("c:" "Temp" "Data du jour")
dddir (reverse dddir);Inverse la liste '("Data du jour" "Temp" "c:")
dddir (car dddir);Retourne la 1er élément "Data du jour"
dddir (str2lst dddir " ");Conversion du texte en liste '("Data" "du" "jour")
dddir (xstrcase (car dddir));Mise en majuscule du premier élément "DATA"
(command "_regen")
)

Ici, j'ai fait glisser la variable dddir pour éviter dans créer une à chaque opération.

Un avantage de l'Autolisp, les variables peuvent changer de type, contrairement à beaucoup d'autre langages.

DDDIR devient donc une variable globale, disponible dans Autocad, avec !DDDIR par exemple.

STR2LST et BUTLAST sont des fonctions "classiques" trés utilisées, fait une recherche str2lst site:cadxp.com et tu trouveras d'autres exemples d'application.

 

Bon courage

Lien vers le commentaire
Partager sur d’autres sites

Je ne peux que t'encourager.

Du coup je vais prendre un peux de temps pour expliquer ma démarche.

 

Les expressions de champs son limitées à ce qui est disponible avec la commande CHAMP.

Par bonheur, parmi elles, il y a VariableLisp.

Lorsque vous la sélectionnez, vous voyez la totalité des variables disponibles dans le panneau du milieu.

Nous allons donc simplement créer une variable interrogée par le champ.

Je vais développer le code.

 

(defun c:ddd nil ;Défini la fonction C:DDD en créant la commande Autocad DDD, et nil pour aucun argument ni variable
(setq 	dddir (getvar 'DWGPREFIX);Chemin du fichier ex "c:\\Temp\\Data du jour\\"
dddir (str2lst dddir "\\");Conversion du chemin en liste '("c:" "Temp" "Data du jour" "")
dddir (butlast dddir);Suppression du dernier élément de la liste '("c:" "Temp" "Data du jour")
dddir (reverse dddir);Inverse la liste '("Data du jour" "Temp" "c:")
dddir (car dddir);Retourne la 1er élément "Data du jour"
dddir (str2lst dddir " ");Conversion du texte en liste '("Data" "du" "jour")
dddir (xstrcase (car dddir));Mise en majuscule du premier élément "DATA"
(command "_regen")
)

Ici, j'ai fait glisser la variable dddir pour éviter dans créer une à chaque opération.

Un avantage de l'Autolisp, les variables peuvent changer de type, contrairement à beaucoup d'autre langages.

DDDIR devient donc une variable globale, disponible dans Autocad, avec !DDDIR par exemple.

STR2LST et BUTLAST sont des fonctions "classiques" trés utilisées, fait une recherche str2lst site:cadxp.com et tu trouveras d'autres exemples d'application.

 

Bon courage

 

Merci pour pour toutes ces infos!

Mais je me rend bien compte que la tâche va être difficile car apprendre le langage LISP est bien compliqué et chronophage en tout cas pour moi

et malheureusement j'ai d'autre impératif.

Mais je prends les encouragements quand même tongue.gif !

Merci pour tout et bon weekend!

Lien vers le commentaire
Partager sur d’autres sites

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

×
×
  • 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é