Se è vero che la natura di tutte le cose è impermanente, allora anche le stringhe non possono sfuggire a questa legge.
In questo articolo vedremo alcuni comandi per la modifica di una stringa.
In realtà la stringa originale viene soltanto letta, non viene modificata, ma viene creata una nuova stringa che contiene le modifiche volute.
Tutto minuscolo
# sintassi
string tolower str
Il comando legge tutti i caratteri della stringa originale str e restituisce una nuova stringa con tutti i caratteri in minuscolo.
set str "My cat is BLACK!"
puts "[string tolower $str]"
---
my cat is black!
Tutto maiuscolo
# sintassi
string toupper str
Il comando legge tutti i caratteri della stringa originale str e restituisce una nuova stringa con tutti i caratteri in maiuscolo.
set str "My cat is BLACK!"
puts "[string toupper $str]"
---
MY CAT IS BLACK!
Ritaglia
# sintassi
string trim str ?trimChars?
Il comando crea una nuova stringa composta da tutti i caratteri che appartengono alla stringa originale str tranne quelli elencati nella stringa opzionale trimChars che si trovano soltanto all’inizio o alla fine della stringa originale str.
set str1 "horse..."
set str2 "...horse"
set str3 "hor...se"
puts "[string trim $str1 .]"
puts "[string trim $str2 .]"
puts "[string trim $str3 .]"
---
horse
horse
hor...se
Se vogliamo lavorare soltanto sui caratteri iniziali della stringa originale str, allora utilizzeremo il sottocomando specializzato trimleft. Se invece vogliamo lavorare soltanto sui caratteri finali della stringa originale str, allora utilizzeremo il sottocomando specializzato trimright.
set str "...hor...se..."
puts "[string trimleft $str .]"
puts "[string trimright $str .]"
...
hor...se...
...hor...se
Se la stringa trimChars viene omessa, l’interprete Tcl considera come caratteri di default da eliminare i seguenti (tra parentesi il valore decimale del relativo codice ASCII):
- il carattere space (32)
- il carattere tab (9)
- il carattere line feed (10)
- il carattere carriage return (13)
Nota: nei sistemi operativi GNU/Linux e macOS il carattere per l’accapo è il singolo line feed (10), nel sistema operativo Windows l’accapo è la combinazione dei caratteri carriage return e line feed (13 e 10).
Formatta
# sintassi
format formatString ?arg1 arg2 ... argN?
Il comando restituisce una stringa formattata in base alle specifiche definite dall’Istituto Americano di Normalizzazione (ANSI) relative alla procedura sprintf del linguaggio C.
La stringa formatString descrive quindi come vogliamo che gli argomenti successivi vengano formattati.
Per avere una visione completa di come il linguaggio Tcl tratti la formattazione si rimanda al comando format del manuale.
Qui ci basta sapere che la stringa formatString può anche contenere parole e simboli di backslash, ma deve necessariamente prevedere una porzione di stringa che definisce la vera e propria formattazione. Questa porzione di stringa deve essere composta in questo modo:
- il primo carattere deve essere il carattere
% - possiamo o meno specificare l’allineamento del dato con uno dei seguenti due caratteri:
-(il dato verrà giustificato a sinistra)+(il dato verrà giustificato a destra)
- un numero che specifica la larghezza del campo dove verrà inserito il dato
- uno dei seguenti caratteri per specificare la tipologia del dato:
s(stringa)d(valore intero decimale)x(valore intero esadecimale)o(valore intero ottale)f(decimale a virgola mobile)
set myNumber 10
set myLabel "is the number $myNumber formatted as a"
set a [format "%+10s $myLabel string" $myNumber]
set b [format "%+10d $myLabel decimal integer" $myNumber]
set c [format "%+10x $myLabel hexadecimal integer" $myNumber]
set d [format "%+10o $myLabel octal integer" $myNumber]
set e [format "%+10f $myLabel floating point number" $myNumber]
puts "$a"; puts "$b"; puts "$c"; puts "$d"; puts "$e"
---
10 is the number 10 formatted as a string
+10 is the number 10 formatted as a decimal integer
a is the number 10 formatted as a hexadecimal integer
12 is the number 10 formatted as a octal integer
+10.000000 is the number 10 formatted as a floating point number
Per il prossimo articolo avremo bisogno di agganciare le cinture di sicurezza perché faremo la conoscenza delle terribili espressioni regolari (regular expressions).
