IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Lisp Discussion :

Rechercher un mot puis le remplacer


Sujet :

Lisp

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 17
    Points : 8
    Points
    8
    Par défaut Rechercher un mot puis le remplacer
    Bonjour

    Je suis confronté à un petit problème.

    Je cherche à faire une routine qui me recherche un mot ou une chaîne de caractère dans ma feuille autocad et me le remplace par un autre. et ce mot ne doit pas être dans un attribut, c'est juste un élément "TEXT".

    Après mes recherche sur internet, j'avais bien trouver RECHMOT.lsp sur http://ma83.free.fr/info/acadlisp.htm mais le lien de téléchargement est mort ...

    Autant que j'ai fais des programmes pour changer les attribut d'un bloc mais je n'arrive nullement à faire la sélection des éléments texte de la feuille ...

    En gros, mon lisp devrait faire pareil que la commande, édition / remplacer sous autocad ... Si quelqu'un peut m'ouvrir une piste pour me décoincer :/

    Merci d'avance et bonne journée !

  2. #2
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 17
    Points : 8
    Points
    8
    Par défaut
    bon, j'ai trouvé comment répondre à ma question, j'ai trouver une autre lisp et je l'ai modifié à ma guise grace à des réponse de Patrick35 donné à un autre utilisateur, celà ma donne ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
     (setq ptr 0)
     (setq selection (ssget "x"))
     (repeat (sslength selection)               ;Pour chaque élément de la sélection...
      (setq entite(ssname selection ptr))       ;Obtient le nom de l'entite de la base de données.
      (setq propriete(entget entite))           ;Obtient la liste des propriétés de l'entité.
      (if (= (cdr(assoc '0 propriete)) "TEXT")  ;L'entité est un texte.
       (progn
        (setq mot (cdr(assoc '1 propriete)))
        (if
         (or
         (= mot "MOT A SUPPRIMER")
         )
         (progn
         (setq mot "")
         )
        )
        (progn
         (setq propriete(subst (cons '1 mot) (assoc '1 propriete) propriete))    ;Affecte la nouvelle valeur de texte à la liste des propriétés.
         (entmod propriete)                          ;Mise à jour de la liste des propriétés.
         (entupd entite)                             ;Regénération de l'entité.
        )
       )
      )
      (setq ptr(+ 1 ptr))
     )
     (princ)
    Si vous comprenez bien, je remplace le mot "MOT A SUPPRIMER" par "" (rien du tout donc). Ca à donc pour effet de faire disparaitre MOT A SUPPRIMER de mon écran par contre .... ça n'efface pas la zone de texte (et donc, je ne peux purger le calque associé).

    Pouvez-vous me dire comment supprimé cette éléments texte définitivement ?

    Merci d'avance

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 17
    Points : 8
    Points
    8
    Par défaut Ajout de la balise code (bouton # en haut à droite de l'éditeur)
    J'ai trouvé

    Voici pour ceux que ça pourrait intéresser.

    *Débutant inside*
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    (setq ptr 0)
     (setq selection (ssget "x"))
     (repeat (sslength selection)               ;Pour chaque élément de la sélection...
      (setq entite(ssname selection ptr))       ;Obtient le nom de l'entite de la base de données.
      (setq propriete(entget entite))           ;Obtient la liste des propriétés de l'entité.
      (if (= (cdr(assoc '0 propriete)) "TEXT")  ;L'entité est un texte.
       (progn
        (setq mot (cdr(assoc '1 propriete)))
        (if
         (or
         (= mot "MOT A SUPPRIMER")
         )
         (progn
         (entdel entite)
         )
        )
       )
      )
      (setq ptr(+ 1 ptr))
     )
     (princ)

  4. #4
    Membre habitué
    Inscrit en
    Juin 2002
    Messages
    198
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 198
    Points : 139
    Points
    139
    Par défaut
    [...
    (setq selection (ssget "x" '((0 . "TEXT"))))
    [/QUOTE]
    pour éviter de tester le type d'entité que tu traites et donc sélectionner uniquement les textes

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 17
    Points : 8
    Points
    8
    Par défaut
    Oh merci clovis !

    J'entre tout de suite ça dans ma routine ! Merci !

  6. #6
    Membre habitué
    Inscrit en
    Juin 2002
    Messages
    198
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 198
    Points : 139
    Points
    139
    Par défaut
    tu peux aussi regarder du côté de vlisp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    (defun c:cleanText ( / mod )
    	(setq 	mod(vlax-get(vlax-get(vlax-get-acad-object)'activedocument)'modelspace))
    	(vlax-for ent mod
    		(if (=(vlax-get ent 'ObjectName) "AcDbText")
    			(if (or (=(vlax-get ent 'TextString)"")
    					(=(strcase(vlax-get ent 'TextString))"MOT A SUPPRIMER")
    				)
    				(vla-delete ent)
    			)
    		)
    	)
    	(princ)
    )

Discussions similaires

  1. Réponses: 7
    Dernier message: 06/08/2014, 22h05
  2. [TP]Recherche de mots dans un Doc.
    Par Loceka dans le forum Turbo Pascal
    Réponses: 8
    Dernier message: 04/10/2004, 19h04
  3. Recherche des mots contenant ...
    Par Asdorve dans le forum Langage SQL
    Réponses: 3
    Dernier message: 18/06/2004, 10h23
  4. Réponses: 10
    Dernier message: 22/05/2004, 13h51
  5. Recherche multi-mots sur une seule colonne
    Par Badiste dans le forum Langage SQL
    Réponses: 2
    Dernier message: 31/03/2004, 11h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo