Aggiornare espressione diesel nei campi dati

x11start

Utente Standard
professione: Disegnatore prefabbricati
software: Autocad - GStarCAD
regione: Piemonte
In azienda utilizziamo un nome per i file dei vari clienti, impostati in questo modo:

Mario Rossi 24-900.dwg

In cui
- Nome del cliente: può avere lunghezza variabile,
- Anno
- N. progressivo della commessa

Per i vari disegni riferiti a quel cliente, ho inserito dei campi dati con un espressione diesel che mi estrapola in automatico l'anno ed il N. di commessa:

[imath](substr,[/imath](getvar,dwgname),[imath](-,[/imath](strlen,$(getvar,dwgname)),9),6)

sostanzialmente, mi prende il nome del file, ne estrae 6 caratteri a partire dalla posizione 9 dal fondo.

il problema è che ora ci stiamo avvicinando alla commessa 1000 ... che mi sballa il risultato: verrebbe "4-1000" anzichè "24-1000".

Ho risolto includendo un IF nell'espressione diesel che diventa:

[imath](if,[/imath](substr,[imath](getvar,dwgname),[/imath](-,[imath](strlen,[/imath](getvar,dwgname)),7),1)"1",[imath](substr,[/imath](getvar,dwgname),[imath](-,[/imath](strlen,[imath](getvar,dwgname)),10),7),[/imath](substr,[imath](getvar,dwgname),[/imath](-,[imath](strlen,[/imath](getvar,dwgname)),9),6))

Cioè :

$(if, -> SE ...

[imath](substr,[/imath](getvar,dwgname),[imath](-,[/imath](strlen,$(getvar,dwgname)),7),1)"1", -> Il 7 crt (per 1 solo crt) dalla fine del nome file è = "1" ..

[imath](substr,[/imath](getvar,dwgname),[imath](-,[/imath](strlen,$(getvar,dwgname)),10),7), -> Prendi dal 10° crt per 7 crt (commesse > a 1000)

[imath](substr,[/imath](getvar,dwgname),[imath](-,[/imath](strlen,$(getvar,dwgname)),9),6) -> Altrimenti prendi dal 9° crt per 6 crt (commesse < a 1000)

) -> Chiude l'IF


.... il mio problema è che dovrei SOSTITUIRE tutti questi campi dati in TUTTI i disegni ....

Secondo voi è possibile creare un lisp o uno script in grado di "trovare" e "sostituire" un'espressione in un campo dati?
 

Allegati

  • Prova. 24-999.dwg
    117.5 KB · Views : 1
  • Prova. 24-1000.dwg
    117.5 KB · Views : 2

rpor66

Utente Standard
professione: Programmatore
software: Lisp, Vba per Autocad, BricsCad e GstarCAD, CadWorx
regione: Sicilia
Sono partito dal programma pubblicato nel forum "Elimina hatch da blocchi", modificato per eliminare il testo con HasExtensionDictionary=-1, cercato esempio per come aggiungere un campo con espressione diesel al dwg, fuso il tutto, creato il file. A te modificarlo per adattarlo al tuo bisogno.
 

Allegati

  • CambiaFieldInBlocco.lsp
    990 bytes · Views : 5

x11start

Utente Standard
professione: Disegnatore prefabbricati
software: Autocad - GStarCAD
regione: Piemonte
Scusa se non ho risposto subito: in questi gg non ho più usato il PC.

Provo a darci un'occhiata e poi ti faccio sapere.

Grazie mille!
 

x11start

Utente Standard
professione: Disegnatore prefabbricati
software: Autocad - GStarCAD
regione: Piemonte
Ho risolto con un unico comando che, cliccando sul campo testo (o anche su un testo normale), mi inserisce la stringa diesel voluta.
Praticamente ho fatto un piccolo lisp con solo un unica (e lunghissima!) riga:

(vlax-put(vlax-ename->vla-object (car (entsel)))'TextString"%<\\AcDiesel [imath](if,[/imath](substr,[imath](getvar,dwgname),[/imath](-,[imath](strlen,[/imath](getvar,dwgname)),7),1)\"1\",[imath](substr,[/imath](getvar,dwgname),[imath](-,[/imath](strlen,$(getvar,dwgname)),10),7),
[imath](substr,[/imath](getvar,dwgname),[imath](-,[/imath](strlen,$(getvar,dwgname)),9),
6))>%")

Ps. se il testo da variare è interno ad un blocco, non devo far altro che entrare nell'editor blocchi e lanciare il lisp da lì, per selezionare il campo testo da cambiare.

Grazie per l'aiuto.
 

Statistiche forum

Discussioni
59,249
Messaggi
504,723
Utenti registrati
110,465
Ultimo utente registrato
Jamiekib

Utenti online

Top