Last Updated:
Sketchup scripting: Ruby e le stringhe
Sketchup scripting: Ruby e le stringhe Massimiliano Pratelli

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.

Tabella 2.3 dal libro di Mattew Scarpino

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

MetodoDescrizioneEsempio
downcaseCambia tutte le lettere in minuscolo"Hello".downcase -> "hello"
hexConverti un'espressione esadecimale in un numero"0x42".hex -> 66
include?Verifica se la stringa contiene l'espressione fornita"hello".include? "ell" -> true
indexRestituisce l'indice della prima occorrenza della stringa specificata"Hello".index("e") -> 2
lengthRestituisce il numero di caratteri nella stringa"Hello".length -> 5
lstripRimuove gli spazi vuoti iniziali dalla stringa " Hello ".lstrip -> "Hello "
replaceSostituisce la stringa con un'altra stringa"Hello".replace("Hola!") -> "Hola!"
reverseInverte i caratteri nella stringa"Hello".reverse -> "olleH"
rindexRestituisce l'indice dell'ultima occorrenza della stringa specificata"Hello".rindex("l") -> 3
sizeRestituisce il numero di caratteri nella stringa"Hello".size -> 5
splitDivide la stringa in sottostringhe secondo un carattere "divisorio" e restituisce un array con le sottostringhe"Hello,world,again".split(",")
-> ["Hello","world","again"]
stripRimuove gli spazi bianchi iniziali e finali dalla stringa " Hello ".strip -> "Hello"
to_fSe possibile, converte la stringa in un numero a virgola mobile (float) e restituisce il numero"-1.3e10".to_f -> -13000000000.0
to_iSe possibile, converte la stringa in un numero intero e restituisce il numero"2000".to_i -> 2000
trSostituisci caratteri specifici nella stringa con altri caratteri specificati"Hello".tr("le","ma") -> "Hammo"
upcaseChange all letters to upper-caseHello.upcase -> "HELLO"
Tabella 1

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