modifica testo

sgreender

Utente standard
professione: Libera
software: cad vari
regione: Lombardia
ciao,
esiste un modo per modificare in modo automatico dei testi?

Vi spiego, ho una quantità di testi (singoli, singola riga) con davanti un numero progressivo... ad esempio:

Testo 1: "1 pagina prima"
Testo 2: "2 pagina seconda"
Testo 3: "3 pagina terza"
Testo 4: "4 pagina ..."
e così via...

I testi sono poi utilizzati per comporre un indice richiamandoli come campo dati (oggetto - contenuto).

Avrei bisogno di inserire un separatore fra il numero ed il testo in modo rapido... ed avere come risultato:

Testo 1: "1- pagina prima"
Testo 2: "2- pagina seconda"
Testo 3: "3- pagina terza"
Testo 4: "4- pagina ..."

Avete qualche idea? Perché sono circa 400 testi e diventa pesante da fare manualmente.

Grazie!
 

Tristan

Moderatore Civil 3D
Staff Forum
professione: Application Engineer
software: Autodesk Civil 3D, Revit e altre amenità
regione: Trentino
Beh, se tutti i testi sono simili, fai un banale Trova&Sostituisci (tasto destro > Trova...)

1769706204362.png
 

sgreender

Utente standard
professione: Libera
software: cad vari
regione: Lombardia
Ciao e grazie.

Nell esempio ho indicato i testi con la deacrizione “pagina” ma nella realta ogni testo dopo il numero è differente dagli altri.
Quindi con il trova e sostituisci dovrei indicare solo lo spazio fra numero e testo ma a quel punto anche gli spazi fra le atre parole verranno sostituiti con il trattino.

Scusate l imprecisione.
Riprendo l esempio e correggo:

Testo 1: "1 Copertina e note"
Testo 2: "2 Indice e revisioni"
Testo 3: "3 Simboli e metodo di numerazione”
Testo 4: "4 Caratteristiche quadro"
Ecc eecc
 

Legs

Utente Standard
professione: ingegnere strutturista
software: Autocad
regione: Provincia Milano
Una soluzione potrebbe essere quella di salvare il disegno in formato testo dxf12 e poi fare un cerca e sostituisci tramite un editor di testi che disponga delle espressioni regolari.

Ti allego un piccolo disegno che ho realizzato con 3 scritte:
1 ciao
2 prova
11 nuovo

In dxf12 autocad memorizza il tutto nel seguente formato (sempre relativamente al mio esempio):
Codice:
  0
TEXT
  5
3F56
  8
QUOTE
 10
2826.9328853448250811
 20
4333.6830379866387375
 30
0.0
 40
10.0
  1
1 ciao

e analogamente per le altre due scritte.
In questo caso è possibile trovare questo testo (e contemporaneamente anche gli altri) tramite la ricerca con un'espressione regolare.
Nel caso considerato il pattern di ricerca è:
((?:0\nTEXT)(?:.*\n){14})(\d+)\s+(.*)
mentre il pattern di sostituzione è:
\1\2- \3
con qualche programma (ad esempio word) si usa $ al posto di \ .
Il risultato è quindi:
Codice:
  0
TEXT
  5
3F56
  8
QUOTE
 10
2826.9328853448250811
 20
4333.6830379866387375
 30
0.0
 40
10.0
  1
1- ciao
Nota che c'è un trattino - dopo il numero 1 finale.
Se ora ricarichi il disegno in autocad avrai la soluzione cercata.

Nota Bene: nel caso che ho considerato io i testi sono a singola riga. Non so se particolari formattazioni dei testi possano alterare la forma del dxf aggiungendo o togliendo elementi. Il {14} che vedi nel pattern di ricerca deriva dall'assunzione che il formato dxf si mantenga costante.
In particolare ho salvato in formato dxf12. Non vorrei che altre versioni aggiungano altre righe di descrizione.
Io ho usato BBedit sotto Mac OS ma puoi usare Notepad++ sotto Windows.
DIciamo che gli editor di testo che hanno questa possibilità sono praticamente tutti.

Ti allego il disegno prima e dopo l'intervento (sono in formato dxf12) ed un'immagine dove si vede la ricerca e selezione. Nell'immagine ho evidenziato il tasto utilizzato per applicare la modifica a tutto il disegno (replace all). Nota che ho spuntato l'opzione GREP che serve proprio a dire al programma di fare la ricerca e sostituzione con le regex (espressioni regolari).
In pratica l'espressione regolare memorizza tutte le selezioni tramite i gruppi di cattura ad eccezione degli spazi tra il numero e la scritta. Quindi riscrivo tutti i gruppi memorizzati ed introduco il trattino - ed un spazio tra il numero e la scritta.
Le espressioni regolari sono uno strumento decisamente potente e vale la pena imparare a usarle.
 

Allegati

  • Disegni.zip
    5.2 KB · Views : 0
  • fase-ricerca.pdf
    1 MB · Views : 5

sgreender

Utente standard
professione: Libera
software: cad vari
regione: Lombardia
Ti ringrazio. Interessante workaround…
Esporto i testi in un nuovo file dxf, modifico con l espressione di ricerca e modifica suggerita e reincollo il tutto nel mio dwg.
Se ci fosse un automatismo direttamente dal dwg ancora meglio.
Grazie!
 

dsw

Rossano Praderi
professione: Libero Professionista
software: Vari
regione: Lombardia
Se ci fosse un automatismo direttamente dal dwg ancora meglio.
Un alternativa è creare un "pezzo" di codice in un qualunque linguaggio di scripting/programmazione compatibile con la versione di AutoCAD che stai usando.

Un altra alternativa è provare una soluzione simile a quella suggerita da @Legs (con l'uso delle espressioni regolari per trovare e sostituire il testo), ma eseguendo l'operazione direttamente sul disegno in AutoCAD(cerca/sostituisci con espressioni regolari), anche in questo caso bisogna controllare se questo LISP funziona con la tua versione di AutoCAD.
 

sgreender

Utente standard
professione: Libera
software: cad vari
regione: Lombardia
nulla.
Con la prima soluzione di Legs, c'è qualcosa che non va a buon fine con notepad++ e l'espressione non trova risultati.
Presumo che il file anche in dxf12 si trascini qualche formattazione.

A sto punto devo studiare le espressioni regolari e cercare di scrivere una stringa corretta per il mio caso.

Se avete consigli da dove partire, sono ben acetti!
 

sgreender

Utente standard
professione: Libera
software: cad vari
regione: Lombardia
provato anche con SXRTEXT, sembra più a portata, ma non conoscendo le espressioni regolari ho difficoltà ad impartire le istruzioni corrette.
Ho provato ad utilizzare l'espressione sopra, ma pare non la digerisca...
 

Legs

Utente Standard
professione: ingegnere strutturista
software: Autocad
regione: Provincia Milano
Se usi qualche programma specifico direttamente sui testi (senza passare dal dxf) allora devi usare una regex specifica, tipo questa:
(\d+)\s+(.*)

Eventualmente anche tipo questa:
^(\d+)\s+(.*)
dove specifico per bene che i numeri da leggere sono all'inizio della stringa.

il ^ indica inizio frase (potrebbe non essere necessario)
la \d indica numero ed il più una quantità generica di numeri (almeno 1).
la \s indica spazi e tabulazioni
il punto . indica un carattere qualsiasi che viene ripetuto (asterisco) finché trova caratteri.

Poi la sostituzione è da fare con:
\1- \2
 

dsw

Rossano Praderi
professione: Libero Professionista
software: Vari
regione: Lombardia
il ^ indica inizio frase (potrebbe non essere necessario)
Io direi che in questo caso specifico è necessario includerlo.

Se non viene specificato che la stringa da cercare/sostituire deve trovare corrispondenza solo all'inizio, un testo come "N.1 pezzo" viene modificato in "N.1- pezzi"
 

sgreender

Utente standard
professione: Libera
software: cad vari
regione: Lombardia
nulla sto smanettando da un po' ma non trovo il modo corretto.
Mi son avvicinato un po alla soluzione aprendo il dxf12 con notepad++ ma nella fase di ricerca non riesco a scremare i testi, trova anche altre parti composte da "numero - spazio - lettera" e inserisce il meno "-" anche li...
l'unica cosa che noto, e che potrebbe aiutarmi ma non so che comando usare, è il fatto che nella ricerca trova risultati anche se su più righe...
Se filtrasse solo quelli su unica riga forse riesco a concludere e capire come gira...
Ma al momento sono ancora in alto mare.

SXRTEXT invece sono ancora più in difficoltà... qualsiasi comando impartisco mi risponde dicendo che mancano definizioni e funzioni... anche con i comandi di esempio presenti nella loro spiegazione... quindi presumo non sia compatibile o gli manca qualche pezzo.

Intanto comunque ringrazio tutti per il supporto! Continuo a cercare di trovare l'espressione corretta per notepad++
 

rpor66

Utente Standard
professione: Programmatore
software: Lisp, Vba per Autocad, BricsCad e GstarCAD, CadWorx
regione: Sicilia
Codice:
(defun c:AddTratt(/ sel count n obj Txt rTxt lTxt p)
    (prompt "\nTesti da cambiare: ")   
    (setq sel (ssget))

    (setq Count 0)
    (repeat    (sslength sel)       
        (setq n (ssname sel Count))
        (setq obj (vlax-ename->vla-object n))
        (setq Txt (vla-get-textstring obj))
        (setq p (vl-string-search " " Txt))
        (if (/= p nil)
            (progn
                (setq lTxt (substr Txt 1 p))
                (setq rTxt (substr Txt (+ p 2)))
                (vla-put-textstring obj (strcat lTxt "- " rTxt))
            )
        )
        (setq Count (+ 1 Count))       
    )   
)

Con questo codice estratto da intelligenza umana, avvii comando AddTratt, selezioni i testi, sostituisce lo spazio dopo il numero con il trattino e uno spazio.
 

Statistiche forum

Discussioni
59,421
Messaggi
506,186
Utenti registrati
111,235
Ultimo utente registrato
Archisilone6

Utenti online

Top