Livello di difficoltà:

Ciao a tutti,
per la prima volta a circa un anno dalla nascita di ESRIdipendente, pubblico un post a nome di una ragazza.
In effetti, se ci fate caso, le gissare sono poche.
Spero che con questo Post di Elisabetta, laureanda in Ingegneria Ambientale, anche altre gissare si mettano in luce dando risposte, scrivendo piccoli tutorial o integrando il Manuale di ArcGIS del Conte.
Da "quasi ingegnere" la risposta di Elisabetta è molto chiara e schematica. L'ho integrata con alcuni printscreen, che ovviamente seguono il suo ragionamento, anche se sono realizzati su Nomi di Campi e valori alfanumerici e numerici diversi da quelli citati da Elisabetta nella sua spiegazione, perchè ho sfruttato un mio shape che faceva al caso nostro.
Domanda dell'Anonimo:
Non riesco a mettere in ordine crescente i record di un campo testo in cui figurano sia lettere che numeri. Ogni record è infatti identificato da una lettera e, a seguire, da due cifre.
Grazie mille, buon lavoro
Risposta di Elisabetta:
Ho provato a fare quello che dici, e immagino che il problema sia che i numeri vengono ordinati in questo modo: 1, 10, 11, 2, 20, ecc ecc invece che da 1 a 20...
Si potrebbe risolvere creando un field che contenga solo la parte numerica e uno che contenga solo le lettere, facendo attenzione che il field con i numeri sia di tipo numero (si riconosce perchè il contenuto è allineato a destra); selezionando i due field insieme è possibile fare un doppio ordinamento crescente, e questo dovrebbe risolvere il problema.

Per riempire i due nuovi field, separando la parte numerica da quella alfabetica, si può fare una selezione del field di partenza basata su parte del contenuto, ovvero selezionare tutti i records contenuti nel field "Alfanumerico" che iniziano con A, seguita da qualsiasi numero, con una query del tipo "Alfanumerico" LIKE 'A%' . Una volta selezionati, si può riempire la colonna della parte letterale.
( % indica qualsiasi numero di caratteri, mentre _ indica un solo carattere )


Per la parte numerica è più difficile, perchè una selezione del tipo "Alfanumerico" LIKE '%1' seleziona sia gli A1, B1 ecc, che gli A11; Se la parte numerica è formata da una sola lettera, puoi usare "MISTO" LIKE '_1' per selezionare gli 1, e "MISTO" LIKE '_11' per gli A11, B11...
Forse può essere utile effettuare selezioni successive, ad esempio usando il Method "remove from current selection" per togliere dalla selezione i records indesiderati...
Spero di essermi spiegata bene, è un processo piuttosto macchinoso.... e mi rendo conto che se hai un numero elevato di records rischia di diventare troppo lungo, se non impraticabile, a causa della parte numerica! Spero comunque di essere stata utile almeno un po'.
Certo che sei stata utile!
Grazie Elisabetta

















Principalmente mi occupo di automatizzare diversi processi di elaborazione, quindi provo ad accelerare un po' la procedura per separare lettere e numeri.
Partiamo da un assunto:
Il campo contiene SEMPRE prima UNA lettera e poi n numeri
Posto che i campi siano
ALFA: campo che contiene lettera e numero
CAR: campo che conterrà la lettera
NUM: campo che conterrà i numeri
Tramite il "Field Calculator" facciamo in modo che
[CAR]=left([ALFA],1)
[NUM]=clng(mid([ALFA],2))
Spiegazione
- left estrae i primi n caratteri a sinistra (nel nostro caso 1)
- clng converte un testo numerico in numero. Non è necessario usarlo perchè il motore del field calculator se ne occupa per noi, ma è meglio non tralasciare nulla.
- mid estrae da un testo, a partire da una posizione (2 nel nostro caso dato che in posizione abbiamo la lettera), per un certo numero di caratteri, omettendo il numero di caratteri (come nel nostro caso) estrae dalla posizione specificata fino alla fine del testo
Quindi stiamo dicendo:
- In CAR estrai il primo carattere a sinistra di ALFA
- In NUM converti in numerico ciò che estrai dal secondo carattere di ALFA in poi
Spero possa essere utile