Aller au contenu

Messages recommandés

Posté(e)

bonjour

j'ai une liste de correspondance de numero ou de reperage : pa exemple

"100-002" "201-102"

"300-002" "301-102"

"400-002" "401-102"

etc... cette liste est sous format txt disons liste.txt , mais ce pourrais etre excel

Le but est de remplacer dans mon dessin automatiquement le texte egal au premier terme de la liste par le secon terme ex le texte 100-002 par 201-002 etc....

Quelqu'un pourrait me mettre sur la piste, je ne connais pas trop les procedures de lecture

de fichiers : open etc... et read-line et c'est assez urgent

merci beaucoup

 

Posté(e)

Je me jette à l'eau et je vais essayer de t'aider.

 

(open fichier mode)

 

- fichier = nom du ficher (le nom peut avoir le chemin d'accè)

- Mode = "r" pour read lecture "w" pour write écriture "a" pour append ajouter

 

(close descripteur)

 

ex: (setq Fichier (open "Test.txt" "w"))

(close Fichier)

 

Pour lire

(read-char [descripteur]) descripteur = ex: (setq Fichier (open "test.txt" "r"))

(read-char Fichier)

 

(read-line [descripteur])

 

pour écrire

(write-line chaîne [descripteur])

 

slt

Posté(e)

Bonjour

essaie çà, çà devrait marcher avec ce que tu demandes

 
(defun c:modifietextes (/ nf fich sligne lligne js n ent)
 (setq nf (getfiled "Fichier de conversion" "" "TXT" 0)
       fich (open nf "r")
 )
 (while (setq sligne (read-line fich))
   (setq lligne (read (strcat "(" sligne ")"))
  js (ssget "X" (list (cons 0  "*TEXT") (cons 1 (car lligne))))
  n 0
   )
   (repeat (if js (sslength js) 0)
     (setq ent (entget (ssname js n))
    ent (subst (cons 1 (cadr lligne)) (assoc 1 ent) ent)
    n (1+ n)
     )
     (entmod ent)
   )  
 )
 (close fich)
)  

Posté(e)

Tu penses bien que j'ai essayé et çà marche

j'ai cependant utilisé un fichier dans lequel il y a déjà les guillemets comme dans la question de départ

si les guillemets ne sont pas présents dans le fichier, 100-002 est alors reconnu comme un symbole ; il faut alors utiliser une fonction vl dont j'ai oublié le nom pour transformer ce nom de symbole en chaine

Posté(e)

J'ai retrouvé la fonction c'est vl-symbol-name

 

si les lignes de ton fichier sont de la forme

100-201 201-302

 

alors tu peux utiliser ce code modifié

(defun c:modifietextes (/ nf fich sligne lligne js n ent)
(setq nf (getfiled "Fichier de conversion" "" "TXT" 0)
fich (open nf "r")
)
(while (setq sligne (read-line fich))
(setq lligne (read (strcat "(" sligne ")")))
 (if (= 'SYM (type (car lligne)))
   (setq lligne (mapcar 'vl-symbol-name lligne))
 )  
  
     
(setq js (ssget "X" (list (cons 0 "*TEXT") (cons 1 (car lligne))))
n 0
)
(repeat (if js (sslength js) 0)
(setq ent (entget (ssname js n))
ent (subst (cons 1 (cadr lligne)) (assoc 1 ent) ent)
n (1+ n)
)
(entmod ent)
) 
)
(close fich)
)  

 

si par hasard, il existe des lignes où le tiret (-) n'existe pas alors,

(setq lligne (read (strcat "(" sligne ")")))

va trouver des nombres et non plus des symboles et il faudra alors traiter différemment

 

en cas de besoin, fais signe

 

 

 

Posté(e)

Salut,

 

Attention, la fonction vl-symbol-name ne fonctionne pas avec les nombres ni avec toute autre donnée n'étant pas du type 'SYMBOL.

(vl-symbol-name 12) -> ; erreur: type d'argument incorrect: symbolp 12

 

La fonction vl-princ-to-list fonctionnera avec tout type de donnée.

(vl-princ-to-string 12) -> "12"

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

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é