Aller au contenu

Renommer nom de champ OD


Messages recommandés

Posté(e)

bonjour

je pense que la réponse à ma question est non mais, vu les pointures sur le forum je me dis que peut-être !

Ma question est la suivante : j'ai créé une table de données d'objets et utilisée sur une cinquantaine d'objet,

mais je viens de me rendre compte qu'il y a une erreur dans les noms de deux champs.

Il est impossible de modifier les noms des champs après avoir déjà utilisé la table, avez vous une astuce ?

Merci par avance

Posté(e)

Hello

 

YES impossible de renommer un champ OD alors que l on peut renommer une table OD

 

MAIS il y a un contournement possible ...

1) MAEXPORT (en SQLite par exemple ou en SHP mais limitation a 10 cars pour les Tables et Champs OD)

de tous les objets ayant la table OD "MYODTABLE"

2) Suppression des objets

3) Suppression de la table OD "MYODTABLE" avec la commande ADEDEFDATA

4) MAPIMPORT et lors de la creation de la table OD "MYODTABLE"

on peut aller sur chaque OD et donner un NOUVEAU Nom en entree !

 

Conseil pour les ODs : toujours se limiter a 10 cars pour Tables et Champs

ET n utiliser que des lettres , chiffres , "-" , "_"

ET une Lettre en 1er caractere

 

Au fait connais tu l'outil ODEDIT de Alexander Sharov ??

Pour AutoCAD MAP & CIVIL 2017-2020

https://apps.autodesk.com/CIV3D/en/Detail/Index?id=6058493316603791142

 

LA SANTE, Bye, lecrabe

Autodesk Expert Elite Team

Posté(e)

Bonjour,

Je pense que tu pourrais facilement réaliser cela, je t'invite à lire ce sujet.

 

Une fois le CSV créé tu l'ouvres avec Excel (enregistrer après modifications au format original csv) ou un simple éditeur de texte (notepad ou autre) et tu modifies simplement l'entête de la colonne et tu réimportes le fichier CSV.

 

La modification sera effectuée. Le programme prend en charge plusieurs tables si l'on veut et respecte les n-records (plusieurs enregistrements empilés)

On peut même créer une nouvelle colonne qui serait le résultat d'une formule avec d'autres champs.

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Posté(e)

Salut,

YES impossible de renommer un champ OD alors que l on peut renommer une table OD

on ne peut pas par l'interface Autocad map, mais on peut par le lisp:

;*******************************************************************
;;§/ade/modifie une table à partir de :/tblname tbldesc l-fields
;; tablename tabledesc '(liste des champs)
;; compatible avec les fichier ini de definition de table de nadiaa
;; liste des champs compatible avec la liste retournée par AM_GetTableFormat


(defun NA_modifytab (tblname tbldesc l-fields )
 (setq buff (list tblname tbldesc l-fields))
 (setq l-fields
 (mapcar '(lambda (x)
	   (list (cons "colname" (car x))
		 (cons "coldesc" (cadr x))
		 (cons "coltype" (caddr x))
		 (cons "defaultval" (cadddr x))
		)
	   )
	 l-fields
 )
 )
  
   (ade_odmodifytab (list (cons "tablename" tblname)
		   (cons "tabledesc"  tbldesc)
	       (list "columns"
		     l-fields
	       )
	      )
  )
)

 

le kit "xml" ici:

lire-et-ecrire-des-variables-dans-des-fichiers-msexcel-xml

 

d'autres solutions pour les tables ici:

 

http://g-eaux.over-blog.com/article-incompatibilite-des-tables-de-donnees-da-113227413.html

 

Les fonctions map de Rakesh:

rakeshrao

designsense

 

les fonctions de table (nécessitent powerclic )

;;*******************************************************************************
;;§/ade/ecrit, dans un fichier Ms Excel XML toutes les tables d'un dessin/none
;;peut être utilisé par : miseajour_tables_depuis_xml

(defun c:Ecrit_table_dans_xml (/ nchem fich elast sel lsel curproj)

 
;;;  (setq dwgprefix (car (pw_scie_fich (getvar "dwgname"))))
 (setq dwgname (cadr (pw_scie_fich (getvar "dwgname"))))
 (setq dwgprefix (getvar "dwgprefix"))


 
 ;;creation de la liste tables
(setq ltable (ade_odtablelist))
 
 (setq	ltabledesc
 (mapcar
   '(lambda (x)
      (setq tmp (ade_odtabledefn x))
      (setq desc (cdr (assoc "TableDesc" tmp)))
      (list x desc)
    )
   ltable
 )
 )
   (setq ltabledesc (cons '(";;nom de la table" "description") ltabledesc))
 (setq ltabledesc (cons "[TABLES]" ltabledesc))





(setq	ltabledef
 (mapcar
   '(lambda (x)
      (append
	(list (strcat "[" x "]" ))
	'(( ";;nom de champ" "description" "type" "valeur par defaut"))
        (AM_GetTableFormat x)
	'("")
	)
      
    )
   ltable
 )
 )

 (setq TABLES-DEFINITION
 (append
    (list (list  ";;" "Export XML de définition de tables (C)G-EAUX 2013"))
    (list (list  ";; Fichier"  dwgprefix dwgname ))
    (list (list  ";; date" (PW_CDATE)))
    (list (list  ";; Par" (getenv "username")))
   '("")
   ltabledesc
   '("")
  ;; ltabledef
   (pw_flatten_list ltabledef)
 )
)
   
   
 
 ;;ecriture fichier XML
 (setq sheet-nms  "urn:schemas-microsoft-com:office:spreadsheet")
 
 ;;préparation GPX et trk (carnet de randonnées)
 (setq pw-xmldoc (vlax-create-object "MSXML2.DOMDocument"))
 (vlax-put-property pw-xmldoc 'async :vlax-False)
 ;;dom1.async = :vlax-False
 
  ;; dom1.resolveExternals = False
 (vlax-put-property pw-xmldoc 'resolveExternals :vlax-False)
 ;;ValidateOnParse 
 (vlax-put-property pw-xmldoc 'ValidateOnParse :vlax-False)
 ;;UseInlineSchema 
 ;;(vlax-put-property pw-xmldoc 'UseInlineSchema :vlax-False)
 
 (setq	fich (getfiled "Fichier MsXml à écrire : "
	       (strcat dwgprefix dwgname "_tables")
	       "xml"
	       1
     )
 )
  (pw_ecritNewXml  "TABLES-DEFINITION" )
  
 (vlax-invoke-method pw-xmldoc 'save fich)
 
 (vlax-release-object pw-xmldoc)
 (setq pw-xmldoc nil)
 (startapp "explorer" fich)
 (princ)
)
;;***************************************************************************
;§/ade/Creer des tables contenues dans un fichier tables.xml/none
;;le fichier xml peut être écrit par ECRIT_TABLE_DANS_XML 

(defun c:Creer_tables_depuis_xml (/ tblname tbldesc l-fields)

 ;;chargement des description de table
 (prompt "\nChargez la définition de tables:")
 (c:chargexml)

 (foreach l TABLES
   ;;l = '("E-ACCESS" "Table des accessoires eau potable")
   (setq tblname (car l))
   (setq tbldesc (cadr l))
   (setq l-fields (eval (read tblname)))
   ;;création des tables :
   (NA_addtable_if_not tblname tbldesc l-fields)
 )
)
;;***************************************************************************
;§/ade/Redéfinir et uniformiser les tables contenues dans un fichier tables.xml/none
;;le fichier xml peut être écrit par ECRIT_TABLE_DANS_XML 


(defun c:miseajour_tables_depuis_xml (/ tblname tbldesc l-fields)
 (alert
   "La mise à jour de la table à partir des fichier xml de définition de table\nPeuvent détruire les champs spéciaux issus d'un import APIC FEA\nLyonaise des Eaux"
 )

 (pw_bydefault "mise-a-jour" "Non")
 (pw_getkwordmem
   "\nRéaliser la mise à jour de la table ?/Oui Non"
   "mise-a-jour"
 )

 (if (= "Oui" mise-a-jour)
   (progn


     ;;chargement des description de table
     (prompt "\nChargez la définition de tables:")
     (c:chargexml)

     (foreach l TABLES
;;l = '("E-ACCESS" "Table des accessoires eau potable")
(setq tblname (car l))
(setq tbldesc (cadr l))
(setq l-fields (eval (read tblname)))
(setq l-fields (na_corrige_lfields l-fields))

;;création des tables :
(if	(NA_modifytab tblname tbldesc l-fields)
  (prompt (strcat "\nTable " tblname " mise à jour avec succès"))
  (prompt (strcat "\nTable " tblname " non mise à jour"))
)
     )
   )
 )
 (princ)
)
;;***************************************************************************
;§/ade/corrige une liste l-fields venant d'un fichier xml /l-fields
;;
(defun na_corrige_lfields ( l-fields )
 	(setq l-fields (mapcar '(lambda (x) (car (PW_CUTLISTAFTERRG x 3))) l-fields));_coupe si par erreur il y a plus de 4 éléments

;;complète si la valeur par defaut manque
;;chaine
(setq l-fields (mapcar '(lambda	(x)
			  (if (and (< (length x) 4)
				   (= "Character" (nth 2 x))
			      )
			    (append x '(""))
			    x
			  )
			)
		       l-fields
	       )
)
;;nombre
(setq l-fields (mapcar '(lambda	(x)
			  (if (and (< (length x) 4)
				   (or (= "Integer" (nth 2 x))
				       (= "Real" (nth 2 x))
				       )
			      )
			    (append x '(""))
			    x
			  )
			)
		       l-fields
	       )
)
;;point
(setq l-fields (mapcar '(lambda	(x)
			  (if (and (< (length x) 4)
				    (= "Point" (nth 2 x))
			      )
			    (append x '("0.0,0.0,0.0"))
			    x
			  )
			)
		       l-fields
	       )
)
    
 
(pw_supp_all '("" "" "" "") l-fields)

)

;;***************************************************************************
;§/ade/Compléter et mettre à jour les tables contenues dans un fichier tables.xml/none
;;les champs existants sont redefinis, les autres sont ajoutés. les champs du dessin non contenus dans le XML sont conservés
;;le fichier xml peut être écrit par ECRIT_TABLE_DANS_XML 


(defun c:Completer_tables_depuis_xml (/ tblname tbldesc l-fields)

 ;;chargement des description de table
 (prompt "\nChargez la définition de tables:")
 (c:chargexml)
 
 (Na_Completer_tables TABLES)

 (princ)
)



;*******************************************************************
;§/ade/retourne la liste des (champs valeur) d'une entité en mode rapide/ename TableName
;;(NA_GetfieldData (enam) "EP_TRONC_COND")->(("FeatId" 708) ("PDF" "") ("UNI_DIST" "LES CARROZ") ("NOM" "") ("ELEVATION" "") ("AN_POSE" "") ("AEPANMES" 1975) ("NATURE" "2") ("DIAMETRE" 100) ("NAT_MAT" "2") ("COMMENT" ""))
;; les autres fonctions:
;;;(LIST_ELEM_DONNEES (enam)) rapides, que les tables nadiaa :-> (("ADRESSE" "PROMENADE DE L' ARVE")... )
;;;(GET_DONNEES_ENTITE (enam)) rapide, toutes les tables :-> (("E-TRONCO" (("ADRESSE" "PROMENADE DE L' ARVE")...))
;;;(AM_GETTABLEDATA (enam) "E-TRONCO"): lent, ne retourne que les valeurs: '(("PROMENADE DE L' ARVE" "1085" 0))


(defun NA_GetfieldData (ename TableName / TabDef Rec_Id lfields lchpval )

(if (not (setq Rec_Id (ade_odgetrecord ename TableName 0)))
 (prompt "\ntable non présente")
 (progn
  (setq TabDef (ade_odtabledefn TableName))
  (setq lfields (mapcar '(lambda (x)
		   (cdr (assoc "ColName" x))
		  )
		 (cdr (assoc "Columns" TabDef))
	 )
  )
  (setq lchpval (mapcar '(lambda (x) (list x (ade_odgetrecfield Rec_Id x)))
		 lfields
	 )
  )
  (ade_odfreerec Rec_Id)
  lchpVal
 )
)
)

;*******************************************************************
;§/ade/retourne la liste des (champs description valeur) d'une netité/ename TableName
;;(NA_GetfieldDescData (enam) "INSEE")->(("CDC" "Découpage de la commune en cantons" 0)("CHEFLIEU" "Chef-lieu de canton" 0))
(defun NA_GetfieldDescData ( ename TableName / TabDef ColLst ColDef Col
cnt ColLst NumRecs Tables _ColLst)
(setq
Tables (ade_odgettables ename)
ColLst '()
)

(if Tables
(progn
(if (member TableName Tables)
(progn
	(setq ColDef (AM_GetTableFormat TableName))
	(if ColDef
	(progn
		(setq
			;ColDef (mapcar 'car ColDef)
			NumRecs (ade_odrecordqty ename TableName)
			cnt 0
		)
		(repeat NumRecs
			(setq _ColLst '())
			(foreach Col ColDef
				(setq _ColLst (cons (list (car Col)(cadr Col) (ade_odgetfield ename TableName (car Col) cnt)) _ColLst))
			)
			(setq
				_ColLst (reverse _ColLst)
				ColLst (cons _ColLst ColLst)
				cnt (1+ cnt)
			)
		)
		(setq ColLst (reverse ColLst)) 
	))
))
))
(car ColLst)
)

----------------------------------------------------------------------

Site: https://www.g-eaux.fr

Blog: http://g-eaux.over-blog.com

Posté(e)

Hello

 

YES impossible de renommer un champ OD alors que l on peut renommer une table OD

 

MAIS il y a un contournement possible ...

1) MAEXPORT (en SQLite par exemple ou en SHP mais limitation a 10 cars pour les Tables et Champs OD)

de tous les objets ayant la table OD "MYODTABLE"

2) Suppression des objets

3) Suppression de la table OD "MYODTABLE" avec la commande ADEDEFDATA

4) MAPIMPORT et lors de la creation de la table OD "MYODTABLE"

on peut aller sur chaque OD et donner un NOUVEAU Nom en entree !

 

Conseil pour les ODs : toujours se limiter a 10 cars pour Tables et Champs

ET n utiliser que des lettres , chiffres , "-" , "_"

ET une Lettre en 1er caractere

 

Au fait connais tu l'outil ODEDIT de Alexander Sharov ??

Pour AutoCAD MAP & CIVIL 2017-2020

https://apps.autodes...493316603791142

 

LA SANTE, Bye, lecrabe

 

Merci comment s'utilise cet outil ??

Posté(e)

Salut,

Merci comment s'utilise cet outil ??

le voilà clef en main :

;;§/ADE/Renome un champ/none
;;

(defun c:AdeChangeNomChamp (/ tabledef tablename tabledesc columns monChamp nouvnom monNouvChamp)
(setq tabledef (ade_odtabledefn "A-PROB"))
(setq tablename (car a-prob))
(setq tabledesc (cadr a-prob))
(setq columns (cdr (assoc "Columns" a-prob)))
(setq ancNom (getstring "\nAncien nom de champ ?"))
(setq nouvNom (getstring "\nNouveau nom de champ ?"))
(setq monChamp (assoc (cons "ColName" ancNom) columns))
(setq nouvNom (cons "ColName" nouvNom))
(setq monNouvChamp (subst nouvNom (cons "ColName" ancNom) monChamp))
(setq columns (subst monNouvChamp monChamp columns))
(setq columns (cons "Columns" columns))
(setq tabledef (list tablename tabledesc columns))
(ade_odmodifytab tabledef)
)

copie colle le code dans la ligne de commande autocad,

lance AdeChangeNomChamp

répond aux 2 questions

a+

Gégé

----------------------------------------------------------------------

Site: https://www.g-eaux.fr

Blog: http://g-eaux.over-blog.com

Posté(e)

Je n'ai pas réussi à utiliser "le clef en main" de gégé. (je n'ai pas la table "A-PROB") et la variable a-prob n'est pas défini dans le lisp.

Après adaptation, j'ai remarqué que l'on perdait la valeur attribuée dans le champs renommé, pas top !

 

Donc je me suis attelé pour faire un truc plus générique et qui conserve la valeur des enregistrements (même empilés) après le renommage du champ.

Rename_Field.lsp

  • Like 1

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Posté(e)

Hello Bruno

 

WAOUH cela me parait Tip-Top comme d'habitude !

 

Et le support du Multi-Record OD, c du "costaud" !!

 

LA SANTE, Bye, lecrabe "fatigue"

Autodesk Expert Elite Team

Posté(e)

Salut,

Je n'ai pas réussi à utiliser "le clef en main" de gégé. (je n'ai pas la table "A-PROB") et la variable a-prob n'est pas défini dans le lisp.

Oups, j'avais peut être pas assez testé ...

donc il faut répondre a 3 questions:

;;***************************
;;§/ADE/Renome un champ/none
;;

(defun c:AdeChangeNomChamp (/ tablNom tabledef tablename tabledesc columns monChamp nouvnom monNouvChamp)
(setq tablNom (getstring "\nNom de la table ?"))
(setq tabledef (ade_odtabledefn tablNom))
(setq tablename (car tabledef))
(setq tabledesc (cadr tabledef))
(setq columns (cdr (assoc "Columns" tabledef)))
(setq ancNom (getstring "\nAncien nom de champ ?"))
(setq nouvNom (getstring "\nNouveau nom de champ ?"))
(setq monChamp (assoc (cons "ColName" ancNom) columns))
(setq nouvNom (cons "ColName" nouvNom))
(setq monNouvChamp (subst nouvNom (cons "ColName" ancNom) monChamp))
(setq columns (subst monNouvChamp monChamp columns))
(setq columns (cons "Columns" columns))
(setq tabledef (list tablename tabledesc columns))
(ade_odmodifytab tabledef)
)

Après adaptation, j'ai remarqué que l'on perdait la valeur attribuée dans le champs renommé, pas top !

Effectivement, je ne l'avais pas remarqué,

car je n'utilise pas la modification de table pour renommer les champs, mais pour en ajouter, les remettre dans l'ordre, changer leur casse, leur description.

car tous les autres SIG peuvent réorganiser leur tables a leur guise, donc à chaque nouvel échange avec d'autres BE, j'avais des conflits de tables, rendant les données invisibles.

Changer la casse ne perd pas les données.

 

On a encore ce problème avec notre GPS, qui change sa table de données à chaque mise à jour du logiciel (et il y en a beaucoups).

Sur une même affaire le levé d'il y a un mois est incompatible avec celui d'avant hier !

 

a+

gégé

----------------------------------------------------------------------

Site: https://www.g-eaux.fr

Blog: http://g-eaux.over-blog.com

Posté(e)

J'ai modifié mon post où j'ai proposé le code.

J'ai fiabilisé l'entrée du nom du nouveau champ afin d'éviter les caractères non autorisés et que le nom soit bien valide. (d'ailleurs j'ai mis le code en pièce jointe pour éviter une mauvaise interprétation par un copier-coller sur le forum que pourrait entraîner ces caractères.)

Correction d'un gros bug constaté en utilisation réelle, je ne pouvais pas le laisser dans l'état huh.gif

Pour ceux qui l'auraient récupéré -> poubelle. Reprenez la pièce jointe.

 

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

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é