31 gennaio 2019

Selezione e sostituzione di testi nel disegno CAD

Usare al meglio TROVA e SELRAPID per selezionare i testi in maniera mirata con i ‘Caratteri Jolly’. 

Un po’ di teoria e tanti esempi pratici basati sul loro uso. 

Una delle esigenze che può sorgere a chi lavora con disegni ricchi di testi, è quella di dover editare una parte dei testi caratterizzata dallo stesso tipo di contenuto o pattern.

Non sempre i testi sono organizzati in maniera ottimale, distinti per layer o per colori o stili.
In questi casi risulta impossibile filtrarli secondo le proprietà degli oggetti tipiche del CAD.

Per intervenire in maniera mirata, solo su alcuni, il grosso problema è la selezione.
Come selezionare rapidamente i testi accomunati dallo stesso tipo di contenuto?
Utilizzando i caratteri jolly, è questa la risposta. Utilizzandoli nei comandi di ricerca e selezione.

Ci sono 2 comandi che supportano l’inserimento dei caratteri jolly: Selrapid e Trova.
Ma prima comprendiamo bene cosa sono caratteri jolly.

Caratteri jolly

Sono una serie di caratteri speciali che, in fase di ricerca, assumono un significato particolare e ci permettono di istruire il comando di ricerca sull’esatto tipo di contenuto testuale che vogliamo ricercare e selezionare.

Servono a costruire un modello, pattern di testo, a cui i testi da ricercare presenti nel disegno devono corrispondere.

Ad esempio, il carattere * ha lo scopo di rappresentare un qualsiasi numero di caratteri.
Se volessimo istruire il comando a: trovare tutto i testi che finiscono con “GNO” e abbiano una qualsiasi numero di caratteri che precede questa stringa,  scriveremmo: “*GNO”.

Il carattere ? indica un singolo carattere. Quindi se ricercassimo la stringa “??GNO” sarebbero presi   in considerazione solo i testi che avessero 2 caratteri prima di “GNO”.

Il carattere # indica un cifra. Ricercare “#000”  equivale  a voler ricercare praticamente un numero… “1000” o “2000” e cosi via.

Il carattere @ indica un solo carattere alfabetico. Ricercare “@000” equivale a voler ricercare la sigla composta da una lettera seguita da 3 zeri... “C000”, “F000”.

Il carattere ~ (tilde) rappresenta una esclusione, una maniera per dire : ”seleziona tutto tranne quello che segue”. Ad esempio “~*GNO” significa seleziona tutto tranne quei testi che contengono la sequenza “GNO”.
Con la tastiera con layout italiano, per ottenere la tilde, premere il tasto ALT e contemporaneamente i tasti 1 2 6 dal tastierino numerico.

All’interno di parentesi quadre [ ] si possono elencare una serie di caratteri che devono essere ricercati. Ad esempio per cercare i testi che contengono le cifre 3 5 e 7 scriveremo [3,5,7].
Un range di numeri o caratteri (come per dire da… a…)  può essere specificato tramite il trattino: [1-5] equivarrebbe a [1,2,3,4,5] oppure, per i caratteri, [a-f] equivarrebbe a [a,b,c,d,e,f].

Tramite il punto si può ricercare un qualsiasi carattere non alfanumerico, ad esempio un “_” (underscore).

Nei casi in cui la ricerca interessi proprio dei caratteri jolly, che quindi vanno valutati per quello che sono e non per la loro funzione speciale, si usa far precedere il carattere jolly dall’apostrofo inverso`”.
Per ottenere questo simbolo ( non è l’apostrofo che si trova sul tasto del punto interrogativo!) tenere premuto il tasto ALT e digitare contemporaneamente 9 6 dal tastierino numerico.

Tutti questi caratteri possono essere combinati tra di loro al fine di meglio definire il pattern da ricercare, ma con alcuni limiti.

Prima di vedere degli esempi pratici analizziamo brevemente i comandi in cui utilizzarli.

I comandi per la Selezione e sostituzione

Ci sono 2 comandi che possono supportare, ai fini della ricerca, questi caratteri speciali :
Il comando TROVA offre più opzioni, più flessibilità e consente anche di effettuare delle sostituzioni del contenuto del testo. TROVA è sicuramente da preferire a SELRAPID.


Comando TROVA

Molto intuitiva come interfaccia, la finestra di dialogo può essere ampliata per rendere visibili una serie di opzioni.

Con il comando Trova :
è possibile effettuare la ricerca dei testi nell'intero disegno o tra gli oggetti  selezionati;
è possibile avere una lista dei testi coinvolti nella ricerca e ‘zoomare’ selettivamente su ognuno di essi;
è possibile effettuare una sostituzione del contenuto del testo -  o parte di esso - con altro testo:
è possibile creare un gruppo di selezione di tutti o parte dei testi selezionati.

la finestra di dialogo del comando TROVA

In aggiunta, la possibilità di effettuare la ricerca all’interno degli attributi dei blocchi, negli xrif, nei testi delle direttrici e nelle tabelle.

Nella finestra dunque troviamo 2 caselle principali :
  • una per specificare il testo (o il pattern di testo) da trovare, è qui che vanno usati i caratteri jolly;
  • una per specificare il testo che deve essere sostituito al pattern ricercato.
Dei pulsanti, tra cui uno per effettuare la ricerca ed uno per effettuare la sostituzione del testo.

In più, una lista nella quale è possibile vedere in anteprima il risultato della ricerca/sostituzione o selezionare il testo su cui effettuare uno zoom nell'area grafica.

Utilissimi i pulsanti che permettono di creare un gruppo di selezione degli oggetto trovati.

Nella sezione 'Opzioni di ricerca'  è possibile attivare / disattivare una serie di opzioni che rendono questo comando adattabile alle situazioni più varie.

Nella sezione 'Tipi di testo' sono elencati 5 tipi di oggetti aggiuntivi, oltre ai testi, ai quali si può estendere la ricerca.

Comando SELRAPID

Meno raffinato rispetto al precedente Trova,  con SELRAPID si può operare solo sui Testi e TestiM in questa maniera:
  • scegliere nella lista ‘Tipo di oggetto’ Testo o TestoM;
  • nella lista Proprietà scegliere ‘Contenuto’;
  • nella lista ‘Operatore’ selezionare ‘Corrispondenza con carattere jolly’;
  • infine, nella casella ‘Valore’, immettere la stringa da ricercare e poi selezionare il pulsante OK
la finestra di dialogo del comando SELRAPID


Esempi pratici

Dopo un minimo di teoria passiamo a degli esempi pratici, definendo i pattern da utilizzare con Trova caso per caso.

Selezionare tutti i testi tranne quelli che cominciano con una determinata lettera

Immaginiamo che si vogliano selezionare tutti i testi tranne quelli che cominciano con la “S”.
Il pattern da utilizzare in questo caso è: ~S*

Come descritto in precedenza, la tilde esclude ciò che ’incontra’ il pattern che la segue : “S*” .
Quindi con “~S*” si selezionano tutti i testi tranne quelli che cominciano con S ed hanno un qualsiasi numero di caratteri che la seguono.

Selezionare tutte i testi tranne alcuni diciture

Fare pulizia in un sol colpo eliminando testi non necessari in una pianta. Ad esempio le destinazioni dei locali di una serie di appartamenti tranne quelli del Bagno, WC e Lavatoio (pensate ad una a tavola per un impianto idrico derivata dal classico architettonico completo).

Il pattern ~[bagno,wc,lavatoio] seleziona tutti i testi tranne i 3 termini racchiusi tra parentesi quadre.

In questo stringa di ricerca si nota come le parentesi quadre contengono una serie di opzioni separate da virgole. Le parentesi quadre sono precedute dal carattere jolly ~ che significa una esclusione : “Seleziona tutto tranne quello che segue”.



Selezionare i testi che contengono un numero

Con *#* si selezionano tra i tanti testi quelli che contengono un numero, in una qualsiasi posizione si trovi all’interno del testo.

Gli * posti prima e dopo del #  significano che è ammessa la presenza di un qualsiasi numero di caratteri prima e dopo un singolo numero.  “A5”, “A4R”, “f104”,” b52” e “ c41” sono esempi di testi che incontrano questo pattern di ricerca.

Se si volesse invece selezionare testi che abbiano un numero in una determinata posizione dovremmo utilizzare i punti interrogativi per 'marcare' le posizioni fisse degli altri caratteri.
Ad esempio, se il numero si trova come 3° carattere del testo, scriveremo: ??#* per poter selezionare testi tipo: “AB4R” o “ST100”.


E se volessimo selezionare i testi che contengono almeno un numero dispari? Useremmo il pattern: [1,3,5,7,9].


Cambiare il prefisso a tutti i numeri appartenenti alla prima centinaia 

Tipico caso da disegno di piano quotato o risultato di rilievo topografico. 
Ad una serie di punti bisogna cambiare la sigla perché, per esempio, devono fare riferimento alla sigla del punto di stazione.

Abbiamo i testi "A100", "A101" … "A199" da trasformare in "P100", "P101"… "P199".
Nel disegno ipotizziamo che ci siano anche i testi con i numeri della prima decina: "A10", "A11" ecc che devono restare immutati cosi come "A200", "A300" … e cosi via con le altre centinaia.

Se si sostituisse a “A1” il testo “P1” l’operazione sarebbe perfetta… solo che nella sostituzione ricadrebbero anche i testi “A1", "A10" , "A11", "A12" … "A19" .

Questo problema sembrerebbe di facile soluzione con un pattern  A1## per selezionare ciò che vogliamo ma c’è un problema:
La funzione di sostituzione del comando Trova è stata strutturata per sostituire una stringa con l’intero risultato del match, a meno che non si utilizzi il carattere * che mantiene i caratteri esistenti che rispondono al suo criterio (qualsiasi numero di caratteri).

Un esempio spiega meglio:
il pattern “A1##” incontra i nostri testi (A100, A101,A102 ecc fino a A199) ma se nel campo 
‘Sostituisci con’ scrivessimo “P1”questa sigla si sostituirebbe per intero alle nostre sigle ottenendo tante sigle “P1” quante sono i testi A1## rilevati.

Se invece la stringa di ricerca - il nostro pattern - fosse stato “A1*” la sostituzione con “P1”avrebbe interessato solo la parte “A1” ed avremmo effettivamente ottenuto “P100, P101, P102 ecc ma anche P1,P10, P11 che invece dovevano restare immutati.

Questo tipo di problema si risolve con un doppio passaggio, vale a dire un doppio utilizzo di Trova.

Con il primo richiamo del comando Trova selezioniamo i testi che rispondono a questo pattern: A1## e poi, con il pulsante apposito,  creiamo una selezione degli oggetti che ricadono nel pattern. 

Al successivo richiamo del comando Trova si agirà sul gruppo di selezione precedente. Applicando un pattern diverso A1* (ma anche A1 va bene ) e la sigla P1 come testo sostitutivo.


L’animazione seguente riassume visivamente quanto esposto e lo rende (sicuramente) più comprensibile:
la tecnica del doppio utilizzo del comando TROVA per ottenere la sostituzione solo di determinati testi


Rimuovere il simbolo # (o un  altro carattere jolly) dai testi 

Questo è un caso in cui l’oggetto della ricerca è proprio un carattere jolly. 

Il comando non deve interpretarlo come carattere jolly e, per questo motivo, lo si fa precedere dall’apostrofo rovesciato.

Al pattern  `# si sostituisce una stringa vuota, cioè la casella 'Sostituisci con' resta vuota. Un testo "#564" diventa "564".

Rimuovere o sostituire le parentesi tonde 

Nelle situazioni in cui i testi vanno perfezionati ed un ipotetico testo racchiuso tra parentesi tonde “(bagno)” debba esere 'ripulito'.

[()] racchiuse tra parentesi quadre le 2 parentesi tonde possono essere elencate in un volta sola e sostituite con un valore nullo o altro carattere.


Eliminare la parte intermedia di una sigla numerica 

Immaginiamo una serie di sigle con la seguente struttura: "105-40-66"
Il numero compreso fra i due trattini deve essere eliminato insieme ai trattini.

Con il pattern -##- si trovano i testi e si sostituiscono con uno spazio vuoto o altro carattere. Quindi "105-40-66" diventa "105 66".

Conclusioni

I Caratteri Jolly sono un altro strumento con cui, a volte, si possono risolvere grossi problemi che altrimenti porterebbero via molto tempo e l'esecuzione di operazioni tediose... i disegnatori esperti lo sanno.

Nelle nuove versioni dei CAD, anno dopo anno, assistiamo all'aggiunta di funzionalità spesso inutili. Non sarebbe male, invece, implementare (migliorare) quello che già c'è.

Immaginate un comando Trova che supporti il linguaggio DIESEL per la definizione dei pattern... con un minimo di funzioni condizionali e logiche (if , and, or , not).
Potrebbe sembrare qualcosa di complesso ma - vi posso assicurare - che in tanti anni di lavoro mi sono capitate situazione nelle quali funzioni simili mi avrebbero fatto risparmiare tempo prezioso.

Nessun commento:

Posta un commento