Sketchup scripting: Ruby e le stringhe
Come si gestiscono le stringhe in Ruby? Secondo appuntamento con la lettura del testo di Mattew Scarpino. Parliamo di Sketchup scripting, Ruby e le stringhe. Leggi gli appunti per continuare il viaggio dentro le API di Sketchup.
La programmazione con i numeri è importante, ma ci sono molte occasioni in cui dovrai lavorare con il testo. Le operazioni di testo diventano necessarie quando per esempio, leggi caratteri da un file, definisci etichette per un disegno o aggiungi descrizioni ai comandi di un nuovo strumento di SketchUp.
Struttura dei dati: Ruby e le stringhe
Negli script, si utilizzano spesso operazioni di testo per visualizzare messaggi e fare debugging.
In molti linguaggi di programmazione, i singoli caratteri sono trattati in modo diverso rispetto ai gruppi di caratteri. Ad esempio, in Java, 'a' è un carattere e "abcd" è una stringa.
Ruby non fa questa distinzione: sia 'a' che "abcd" sono stringhe. Una stringa contiene uno o più caratteri, inclusi lettere, numeri, punteggiatura e caratteri speciali.
In Ruby, una stringa può essere racchiusa tra virgolette singole o doppie. Se una stringa è racchiusa tra virgolette, l’interprete Ruby riconosce le sequenze escape (ad es. \T per tab, \n per newline) e le visualizza di conseguenza.
Se la stringa è racchiusa tra virgolette singole, le sequenze di escape vengono ignorate. Pertanto, "Line1\nLine2" verrà stampato su due righe a causa del carattere di escape \n. Al contrario, 'Line1\nLine2' verrà stampato su una riga perché il carattere di escape viene ignorato.
Se non conosci le sequenze di escape puoi consultare questa pagina.
Operazioni base con le stringhe
Ruby offre diversi modi per manipolare le stringhe. Due degli operatori più comuni sono + e * e i loro ruoli sono facili da capire. L’operatore + unisce le stringhe, come mostrato nel seguente esempio:
"Ciao," + "mondo"
Il risultato è Ciao, mondo
L’operatore di moltiplicazione * ripete una stringa un determinato numero di volte, come mostrato nel comando seguente:
"Ciao! " * 3
Risultato: Ciao! Ciao! Ciao!
Sottostringhe e intervalli
Spesso capita di accedere ai caratteri di una stringa in base alla loro posizione. La posizione di un carattere è individuata da un indice. All’interno di una stringa, i valori dell’indice si contano da zero, fino alla lunghezza della stringa, meno una.
Un set di caratteri in una stringa è chiamato sottostringa ed è possibile accedere a una sottostringa specificando l’intervallo di indici che la contiene. L’intervallo rappresenta una sequenza di valori e può essere definito in due modi.
Il primo viene specificato come inizio..fine e rappresenta l’intervallo da inizio a fine, incluso fine.
Il secondo tipo è specificato da inizio...fine e rappresenta l'intervallo da inizio a fine, esclusa fine.
La differenza è un punto; nel primo caso ci sono due punti, nel secondo tre.
Vediamo di chiarire con gli esempi:
- 0...4 rappresenta l’intervallo [0, 1, 2, 3]
- 0..4 rappresenta l’intervallo [0, 1, 2, 3, 4]
- -5..-3 rappresenta l’intervallo [–5, –4, –3]
- 'a'...'e' rappresenta l'intervallo ['a', 'b', 'c', 'd']
- 'a'..'e' rappresenta l'intervallo ['a', 'b', 'c', 'd', 'e']
Per ottenere una sottostringa, seguire la stringa dall'intervallo di valori di indice desiderati racchiuso tra parentesi. Prova questi comandi nella Ruby Console di Sketchup:
"HelloWorld"[0..2]
risultato Hel
"HelloWorld"[0...2]
risultato He
"HelloWorld"[1..4]
risultato ello
"HelloWorld"[1...4]
risultato ell
Se l’indice è positivo, la posizione del carattere viene determinata dalla sinistra della stringa. Se l’indice è negativo, la posizione viene determinata da destra. Si osservi la Figura 1.
I seguenti comandi dimostrano come gli indici negativi vengono utilizzati per ottenere sottostringhe:
"HelloWorld"[-10..-6]
risultato: Hello
"HelloWorld"[-3...-1]
risultato rl
Oltre a recuperare una sottostringa con un intervallo, è anche possibile ottenere una sottostringa utilizzando l’indice del primo carattere da cui iniziare e un numero che “misura” la lunghezza della sottostringa.
Il formato è [indice,lunghezza] e i seguenti esempi mostrano come questo viene utilizzato nel codice:
"HelloWorld"[3,4]
loWo
"HelloWorld" [0,5]
Hello
"HelloWorld"[-5,5]
World
Operazioni avanzate
Oltre agli strumenti visti finora, è possibile accedere a molti altri facendo seguire alla stringa, un punto e il nome di un determinato metodo. I metodi verranno spiegati più avanti, per ora, puoi pensare a un metodo come ad un oggetto con un nome specifico che estrae un certo dato.
Ad esempio, lenght e size sono due metodi che restituiscono la lunghezza o il numero di caratteri in una stringa. I seguenti esempi mostrano come si accede a questi due metodi nel codice:
"HelloWorld".length
ossia 10;
"HelloWorld".size
idem, 10;
La Tabella 1 mostra length, size e una serie di altri metodi con la descrizione del loro scopo ed esempi del loro utilizzo. Altri metodi della classe String e altre classi Ruby fondamentali, sono disponibili sul sito della documentazione di Ruby all'indirizzo http://www.ruby-doc.org/core/classes/String.html.
Per approfondire:
Questo il link diretto alle API di Sketchup, alla pagina della classe string - https://ruby.sketchup.com/String.html
Metodo | Descrizione | Esempio |
downcase | Cambia tutte le lettere in minuscolo | "Hello".downcase -> "hello" |
hex | Converti un'espressione esadecimale in un numero | "0x42".hex -> 66 |
include? | Verifica se la stringa contiene l'espressione fornita | "hello".include? "ell" -> true |
index | Restituisce l'indice della prima occorrenza della stringa specificata | "Hello".index("e") -> 2 |
length | Restituisce il numero di caratteri nella stringa | "Hello".length -> 5 |
lstrip | Rimuove gli spazi vuoti iniziali dalla stringa | " Hello ".lstrip -> "Hello " |
replace | Sostituisce la stringa con un'altra stringa | "Hello".replace("Hola!") -> "Hola!" |
reverse | Inverte i caratteri nella stringa | "Hello".reverse -> "olleH" |
rindex | Restituisce l'indice dell'ultima occorrenza della stringa specificata | "Hello".rindex("l") -> 3 |
size | Restituisce il numero di caratteri nella stringa | "Hello".size -> 5 |
split | Divide la stringa in sottostringhe secondo un carattere "divisorio" e restituisce un array con le sottostringhe | "Hello,world,again".split(",") -> ["Hello","world","again"] |
strip | Rimuove gli spazi bianchi iniziali e finali dalla stringa | " Hello ".strip -> "Hello" |
to_f | Se possibile, converte la stringa in un numero a virgola mobile (float) e restituisce il numero | "-1.3e10".to_f -> -13000000000.0 |
to_i | Se possibile, converte la stringa in un numero intero e restituisce il numero | "2000".to_i -> 2000 |
tr | Sostituisci caratteri specifici nella stringa con altri caratteri specificati | "Hello".tr("le","ma") -> "Hammo" |
upcase | Change all letters to upper-case | Hello.upcase -> "HELLO" |
Stampare a video le stringhe
Ruby fornisce tre comandi che visualizzano le stringhe nella console: put, print e printf. Nel contesto di Sketchup, in questi post, il codice di esempio si basa principalmente su put, che mostra una stringa seguita da un carattere di nuova riga.
L’esempio seguente mostra come si usa put:
put "Numero di caratteri in Hello: "+"Hello".length.to_s
si ottiene -> Numero di caratteri in Hello: 5
Il metodo to_s converte il numero restituito da "Hello".length in una stringa. Ruby non converte i numeri in stringhe, questo deve essere fatto via codice.
Il comando print esegue la stessa operazione di put, ma non inserisce una nuova riga dopo la stringa. Il comando printf funziona come print, ma consente di formattare la stringa utilizzando caratteri speciali.
La formattazione di printf è un argomento piuttosto ampio e non possiamo vederlo qui nel dettaglio. Ma i seguenti esempi dovrebbero dare un’idea di come viene utilizzato:
printf "La lunghezza di %s è %d\n", "Hello", "Hello".length
si ottiene: La lunghezza di Hello è 5
printf "L'ultimo indice di b in bubble è %d\n", "bolla".rindex ("b")
si ottiene: L'ultimo indice di b in bubble è 3
Il comando printf di Ruby funziona esattamente come il comando printf presente in C. Una breve ricerca sul Web mostrerà tutti i diversi comandi e le opzioni di formattazione disponibili.
Per approfondire: https://ruby.sketchup.com/String.html
Ti ricordo anche l'articolo introduttivo: Introduzione a Ruby per Sketchup
Esercitati con le stringhe in Ruby
Mi raccomando fai le prove e capisci come Ruby gestisce le stringhe, ora non hai scuse, il materiale c'è! Scrivi nei commenti se noti qualche errore o se hai materiale sul web da segnalare. Il prossimo post sarà su variabili e costanti.
Da leggere: Guida a Ruby - Tipi di dati: Stringhe
Comments