- presentazione del sito
- Registrazione
- Eventi, mostre, convegni ed iniziative segnalate dalle aziende
- Recensioni ed articoli
- Le Mailing Lists
- La rivista Pc Ciechi
- Wiki
- Chi siamo
- Donazioni
- Un progetto degno di nota: Wintalbra
- Come navigare in questo sito
- rss
- Bancomat Accessibili sul territorio nazionale
- Contattaci
- I sostenitori di SpazioAusili
Ancora su numeri e stringhe
Guido Ruggeri su winguidotecnica, 16\01\2010, h. 08.07.
Proviamo a tornare ancora indietro sul concetto di numeri e stringhe.
Abbiamo detto:
Quando l'interprete incontra una parola fatta di soli caratteri numerici, e non racchiusa tra virgolette, la considera un valore numerico.
Questo è un esempio di assegnazione di un valore numerico ad una variabile:
Ed ora, un po' di pubblicità
:Conteggio = 1234
Quando dico caratteri numerici, intendo dire anche il punto, usato come separatore decimale, e il segno meno che precede i numeri negativi.
Esempio:
TotaleCassa = -1235.45
Quando invece l'interprete incontra una qualsiasi cosa, parola, frase, sequenza di caratteri senza senso, insomma qualsiasi cosa, che sia racchiusa tra virgolette, la considera un valore di stringa.
Questo è un esempio di assegnazione di un valore di stringa ad una variabile:
Nominativo = "Guido Ruggeri"
Altro esempio:
SenzaSenso = "1dh49g d 3393hg8 s7ehdi ss5os 3832wspa ajaay cw89qw"
Presta attenzione adesso al prossimo esempio, in cui, ad una variabile che chiamo StringaVuota, assegno il valore di una stringa che non contiene nulla. E come la ottengo? Semplicemente scrivendo due simboli di virgolette, senza niente in mezzo.
StringaVuota = ""
Attenzione che una stringa vuota non è una stringa nulla, c'è una leggera differenza.
Una stringa vuota, anche se non contiene niente, è pur sempre una stringa per la quale l'interprete si è costruito una posizione nella memoria del computer.
Quindi l'interprete la considera sempre come una stringa che ha un suo contenuto e una sua lunghezza, anche se il contenuto è vuoto e la lunghezza è zero.
E' come un file di lunghezza zero: non contiene niente, però esiste, con il suo nome, all'interno di una certa cartella di un certo disco.
Quando invece parliamo di stringa nulla, intendiamo una stringa a cui l'interprete non ha assegnato nessuna posizione nella memoria.
Una stringa nulla, in VBScript, si può rappresentare per mezzo della costante mnemonica vbNullString.
Insomma, dentro le stringhe ci possiamo scrivere qualsiasi cosa: quello che ci scriviamo sono fatti nostri, all'interprete non interessa.
Ci possiamo scrivere "Io mi chiamo: ", ci possiamo scrivere numeri o lettere con o senza senso.
Naturalmente se lo scopo di una stringa è quello di essere passata, come argomento, alla routine MsgBox, allora sappiamo che quella stringa è destinata ad apparire all'utente. Perciò dovrà contenere qualcosa che per l'utente abbia un senso, e quindi dovrà essere scritta in modo grammaticalmente e ortograficamente corretto.
Con ciò, non ho detto che intendo trasformare questo corso in un corso di ortografia e di grammatica. Quelle sono cose che si suppone che o le sappiate, o tornate alle elementari.
Per questo mi infastidisce sentirmi porre certe domande del tipo perché ho scritto "Io mi chiamo: " o perché dopo una qualche parola ci ho messo i due punti: non sono qui per insegnarvi a scrivere. Almeno non dentro le stringhe. Fuori delle stringhe, sì, vi devo insegnare a scrivere in un modo che rispetti la sintassi prevista dal linguaggio VBScript.
Dentro le stringhe, è affar vostro.
Se questi concetti sono finalmente chiari ed entrati nelle vostre teste, anche in quelle più dure, allora, piuttosto che stare a chiedere perché in un certo esercizio avevo scritto "Io mi chiamo: ", proviamo a far tirare fuori qualche domanda più sensata.
Abbiamo detto che dentro le stringhe ci può stare di tutto. Ed è vero, l'ho detto e lo confermo: ci può stare veramente di tutto.
Ma non vi viene in mente che ci potrebbe essere un certo carattere particolare che potremmo avere qualche difficoltà a farci stare dentro?
Chiarisco: non ho detto che c'è un carattere che non possa stare dentro una stringa. Qualsiasi carattere ci può stare.
Ma ce n'è uno che, sulla base di quanto finora abbiamo detto, se volessimo farcelo stare non sapremmo come fare a mettercelo.
Ecco quindi una domanda sensata che mi sarei aspettato.
Non aggiungo altro e, se qualcuno di voi, dimostrando di aver compreso quello che intendo dire, riuscirà a pormi la domanda nel modo giusto, io risponderò.
d.
ci hai detto che all'interno di una stringa possiamo scrivere di tutto e si capisce che per l'interprete tutto quanto sta dentro una stringa che poi e delimitata da virgolette ,non fa parte di istruzioni di programmazione .Quindi devo interpretare che se inserisco nella stringa anche un linguaggio di programmazione ,questo non dovrebbe produrre effetti.
Risposta:
Questa osservazione è giusta.
Supponiamo che io assegno, ad una variabile Istruzioni, una stringa così fatta:
Istruzioni = "Base = 20" & vbCrLf & "Altezza = 15" & vbCrLf & "Area = Base * Altezza / 2" & vbCr & "MsgBox Area"
La stringa contiene, al suo interno, le istruzioni di programmazione per il calcolo dell'area di un triangolo.
Ma, essendo all'interno di una stringa, l'interprete non le riconoscerà come tali.
Per l'interprete, la variabile Istruzione contiene una stringa come tante. Di cosa ci sia all'interno di una stringa, all'interprete non interessa. Lui deve manipolarla, gestirla nella memoria, concatenarla ad altre stringhe se glielo chiediamo, farcela vedere tramite MsgBox se glielo chiediamo, ma non è tenuto a comprenderne il significato.
Però questa tecnica di comporre, manipolando delle stringhe, delle istruzioni di programmazione, che adesso ci è completamente inutile, teniamocela da parte.
Arriverà il momento in cui ci servirà, e sarà quando lavoreremo sulle pagine web, cioè quelle per Internet.
Lì dovremo mischiare istruzioni in HTML con gli script in VBScript o in JavaScript. E succederà spesso di usare codice script per generare, manipolando delle stringhe, delle istruzioni che poi acquistano significato nel momento in cui arrivano nella pagina Web.
Insomma, programmare per generare altre istruzioni di programmazione.
d.
Forse ti riferisci al carattere virgolette?
Ho provato a scrivere:
discorsodiretto = ""non mi piace!""
msgbox discorsodiretto
E dà in effetti errore.
Ti riferisci a questo?
r.
Fatto centro!
Questi sì che sono dubbi sensati da porsi.
Abbiamo detto: una stringa deve essere racchiusa tra virgolette.
E se io dentro la stringa ci voglio mettere proprio un carattere di virgolette?
Ecco che l'interprete si confonde.
Quel carattere di virgolette che sta dentro la stringa lo scambia per la fine della stringa.
E quella parte di stringa che sta dopo le virgolette, la scambia per istruzioni di programma. Cerca di interpretarle, e molto probabilmente va in errore perché non si tratta di istruzioni.
d.
Il carattere che potrebbe, penso, creare difficoltà, può essere le virgoletete perché sono quelle che delimitano le stringhe. Difatti, io mi chiedo: se volessi rimarcare nella stringa un qualcosa tra virgoletgte, come si fa? Si può fare? Oppure si può marcare con gli apici?
Risposta:
Se fossimo in JavaScript, ti direi di si.
Infatti, in JavaScript c'è la doppia possibilità di marcare le stringhe sia con le virgolette che con gli apici.
Allora ce la potremmo cavare in questo modo.
Frase = 'Tizio dice a Caio: "Sempronio è un deficiente"'
La stringa è racchiusa tra apici, perciò le virgolette vengono interpretate come appartenenti alla stringa.
Il problema, però, si porrebbe anche in JavaScript se la stringa dovesse contenere sia apici che virgolette.
Se cioè scrivessimo:
Frase = 'Tizio dice a Caio: "L'intelligenza di Sempronio lascia a desiderare"'
faremmo impazzire anche l'interprete JavaScript, che scambierebbe l'apice interno alla stringa per la sua fine e non saprebbe più come cavarsela con il resto della stringa.
In VBScript bisgona comunque trovare un'altra soluzione, perché non si possono usare gli apici per marcare le stringhe. Gli apici hanno il significato di indicare gli inizi dei commenti.
d.
per dare risposta al quesito posto ,direi che dentro una stringa non dovrebbero esserci parole accentate ,pechè l'accento è un'apice e l'apice fa parte del linguaggio di programmazione e,per questo produce una istruzione incoerente per l'interprete .
Risposta:
sbagliato.Dentro una stringa ci può stare tutto.
d.
come si fa a scrivere le virgolette in una stringa, in modo che poi appaiano a video, in un messaggio?
Per esempio:
Chi ha scritto "le mie prigioni"?
Se io, per assegnarla ad una variabile o per passarla a MsgBox, metto questa stringa fra virgolette, succede un bel casotto. Come fare a far apparire a video la frase, così come io l'ho scritta?
Risposta:
Ora che la domanda è venuta fuori, possiamo dare la soluzione.
Intanto, l'interprete VBScript già ci offre una possibile soluzione: quella di raddoppiare le virgolette.
Un doppio segno di virgolette, all'interno di una stringa, viene interpretato come un singolo segno di virgolette interno alla stringa, anziché come la fine della stringa.
Proviamo a scrivere così:
MsgBox "Chi ha scritto ""le mie prigioni""?"
Prestiamo attenzione al gioco delle virgolette:
Virgolette dopo MsgBox, prima della parola Chi: servono a marcare l'inizio della stringa.
Doppio segno di virgolette prima della parola le: servono ad indicare un unico segno di virgolette da considerarsi interno alla stringa.
Doppio segno di virgolette dopo la parola prigioni: servono ad indicare un unico segno di virgolette da considerarsi interno alla stringa.
Virgolette dopo il punto di interrogativo: servono a marcare la fine della stringa.
Questa è una tecnica che risolve il problema, ma che a me piace poco: con questi giochi di virgolette doppie, ci si confonde facilmente, specialmente quando le frasi cominciano a diventare lunghe e complesse.
Io preferisco ricorrere ad un'altra soluzione.
C'è una funzione che restituisce una stringa col carattere delle virgolette, ed è questa:
Chr(34)
Della funzione Chr parleremo un'altra volta.
Per ora ci basti sapere che Chr, chiamata con l'argomento 34, restituisce un carattere di virgolette.
Allora possiamo scrivere:
MsgBox "Chi ha scritto " & Chr(34) & "le mie prigioni" & Chr(34) & "?"
Provare per credere.
***
Varo Landi.
consiglierei di seguire l'esempio che ,adesso ,ti indico : Ho cominciato a trascrivere il corso dal linguaggio tecnico al linguaggio volgare . Il testo che allego è il risultato di quanto ho iniziato a fare . La procedura è quella di richiamare la lezione in un file di testo e,leggendola riscrivere semplificando i concetti .
Dall'ingegnere gradirei un controllo per correggere eventuali errori di interpretazione .
Nel computerci sono molti elementi elettronici e meccanici ,ma il suo cuore è il processore .
Il processore ha la logica di calcolo e di confronto:
se al processore diamo due numeri ,tramite la logica di calcolo può eseguire le quattro operazioni di calcolo ,quali somma ,sottrazione ,divisione e moltiplicazione ,ma anche ,tramite la logica di confronto ,puo determinare quale di questi numeri è maggiore o minore ecc.
Fondamentalmente il processore fa queste operazioni ,ma nel computer è inserito anche un sistema di memoria e un sistema operativo che dialoga col processore usando un linguaggio di macchina :
Il sistema operativo ,nel nostro caso ,è quello di Microsoft windows ,subentrato al vecchio MS - DOS .
Il sistema operativo ha il compito di ordinare files ,cartelle ,periferiche ecc.. Il sistema operativo è un sistema complesso che riceve ,tramite un interprete ,le istruzioni dell'operatore umano ,le traduce in un linguaggio di macchina che consega al processore ,il quale esegue le operazioni richieste .Per raggiungere lo scopo di dare istruzioni al processore ,tramite il sistema operativo ,L'operatore umano usa un linguaggio di programmazione :senza questo l'interprete non potrebbe fare da intermediario tra uomo e processore . .
d.
> ma se il risultato della mail lo voglio far risultare
> comunque senza spazi nel caso di de angelis come dovrei
> fare? o l'abbiamo gia' fatto?
Risposta:
Prima di arrivarci dobbiamo parlare della manipolazione
delle stringhe.
Finora tutto quello che abbiamo imparato a fare, con le
stringhe, è concatenarle. Qui non ci basterebbe più.
Perché chiaramente dovremo fare qualcosa per togliere lo
spazio tra De e Angelis. Ma per poterlo fare, dobbiamo prima
imparare come spezzare una stringa in più stringhe, cioè
come fare l'operazione inversa del concatenamento.
Poi ci servirà anche un modo per trovare dove sta lo
spazio. Certo, noi sappiamo che, nella stringa "De Angelis",
lo spazio è al terzo carattere, però
ci serve un modo perché anche l'interprete VBStript lo
sappia. E, soprattutto, perché lo sappia qualunque sia la
stringa, perché se invece ad esempio fosse "Garcia
Garmendia" lo spazio sarebbe non più al terzo ma al
settimo carattere.
Una volta trovato dov'è lo spazio, dovremo spezzare la
stringa in quel punto, e quindi riconcatenare le due parti
in modo da togliere lo spazio.
Beh, mi sa che ce ne abbiamo ancora un bel po' prima di
arrivarci...
***
3cose fondamentali da conoscere prima di tutto.
Guido Ruggeri.
d.anche se a me tutto questo mi sembra difficilissimo, e per
rifletterci come swi deve mi ci vorrebbe chissà quanto.
Risposta:
Ti sembra difficilissimo perché non hai capito nemmeno le
prime lezioni. Quelle che avevo cercato di ripetere nei
ripassi che avevamo fatto, ma evidentemente ancora non è
bastato.
Una volta che avrai capito quelle, tutto il resto sembrerà
più facile.
Ti ripeto i punti chiave che devi assolutamente capire se
vuoi andare avanti:
1. nel codice sorgente, ogni cosa che è compresa tra due
segni di virgolette è un valore di stringa. Ciò che è
dentro le virgolette sono caratteri che possono avere un
senso per noi che li leggiamo, ma per il computer sono solo
caratteri da manipolare che non hanno significato.
2. nel codice sorgente, ogni parola composta da soli
caratteri numerici, compreso il punto usato come saparatore
decimale e il segno - per i numeri negativi, e non compresa
tra due segni di virgolette, è un valore numerico.
2. nel codice sorgente, ogni parola che non è compresa tra
due segni di virgolette, e quindi non fa parte di una
stringa, e che non rappresenti un valore numerico, deve
essere: un nome di variabile, oppure di costante, oppure
un'istruzione o un operatore facente parte del linguaggio,
oppure una chiamata ad una routine.
Per tutti questi nomi vale la regola: possono essere
composti da lettere e numeri, ma non possono iniziare con un
numero, e non possono comprendere nè spazi né segni di
punteggiatura né vocali accentate.
Quando avrai capito queste tre cose, allora potrai ragionare
sul resto. Finché non ti entrano, tutto il resto diventa
inutile.