- 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
l'istruzione stringsegment negli script di jaws.
fonte originale:
giuseppe di grande su uic h.e., 12\08\2008, h. 09.36.
n.b.
si tratta di una cordiale conversazione tra il programmatore giuseppe di grande e il giovane e valoroso amico alberto buffolino.
(mp)
La prima riga dell'aiuto di Jaws per l'istruzione StringSegment è:
Ed ora, un po' di pubblicità
:string stringsegment(string strString, string strDelimiters, int nIndex)
Il linguaggio di Jaws ha quattro tipi di variabili: int, string, handle e
object. Un po' molto limitato, ma tant'è.
Gli ultimi due tipi non ci interessano.
Le variabili di tipo int (integer o intero) vengono dichiarate per contenere
valori interi (0, 5, 234, 123000, -5, -256, eccetera)
Le variabili di tipo string per contenere stringhe di testo ("alberto",
"jaws", "giuseppe").
Una delle cose della programmazione è che devi prepararti a leggere in
inglese: buona parte dei documenti sono in questa lingua. Seconda cosa è che
devi imparare a utilizzare un certo gergo, altrimenti scambiando
informazioni con altri dell'ambiente potrebbero nascere delle
incomprensioni. Quando io ti scrivo "dichiarare", "tipo", "variabile", non
te le butto lì a caso: hanno un significato ben preciso.
L'help di Jaws per l'istruzione StringSegment è abbastanza chiaro. Come
primo parametro vuole una stringa, come secondo un'altra stringa e come
terzo un intero. Non puoi variare l'ordine o aggiungere parametri a caso
perché ti darebbe un errore.
Il primo parametro string dovrà contenere la stringa di testo che vuoi
parserizzare. Se leggi l'aiuto più sotto c'è proprio scritto in dettaglio. A
proposito, sai che leggi l'aiuto di una istruzione posizionando il cursore
su di essa e premendo shift+f1, vero?
Quindi come primo parametro ci sarà il tuo tempo "00/00/00", parametro
passato anche come variabile stringa.
Il secondo parametro che l'istruzione StringSegment vuole è un'altra
stringa. Stavolta si tratta del delimitatore. Per te cos'è un delimitatore?
Non è per caso quel carattere che separa un elemento da un altro all'interno
della tua stringa col tempo? Quindi? Come secondo parametro specificherai
proprio quel delimitatore: "/".
Il terzo parametro invece è un intero ed è un indice. In poche parole devi
specificare quale elemento vuoi che ti venga restituito. Il delimitatore di
prima non separa la tua stringa col tempo in tre elementi ben precisi?
Allora? Utilizzando come parametro l'intero 1 ti sarà restituito il primo
elemento, se userai 2 il secondo e con 3 il terzo. Quindi? Avrai le ore, i
minuti e i secondi isolati.
Il risultato di una funzione come StringSegment è una stringa, lo leggi
proprio all'inizio dell'aiuto. Ciò significa che quel risultato potrai
conservartelo o utilizzarlo come parametro stringa.
Una funzione ha un compito ben preciso. In questo caso StringSegment ti
restituisce solo un elemento per volta. Quindi? La userai tre volte, no? La
prima volta per le ore, la seconda per i minuti e la terza per i secondi.
Da tutto ciò sai continuare da solo, utilizzando anche l'istruzione
StringToInt?
NB. da me non ti aspettare codice già fatto. Quello che vuoi te lo farei in
due minuti, e mi avrebbe impegnato meno tempo che scriverti tutto questo.
Molti che smanettano con l'open source sanno benissimo come si copia e
incolla: spero che tu non prenda questa strada. [sorriso]
alberto buffolino.
(omissis)
.... Dunque, io sono arrivato, già ieri, al completamento dei
parametri di StringSegment, scrivendo (vado a memoria):
StringSegment ("00/00/00", "/", 3)
in questo caso per i secondi. Ora, qualcosa mi dice che, inserendo questa funzione all'interno di StringToInt, quest'ultima ci restituirà il valore integer
del segmento di stringa dichiarato (?) da StringSegment, cioè quello dei secondi, per ora. Io dovrei quindi scrivere:
StringToInt (StringSegment ("00/00/00", "/", 3))
E qui mi fermo, perché non ho ben capito a cosa corrisponde il valore intero, o integer value che dir si voglia. Più che altro non lo capisco visto che
già la stringa è un valore numerico, 00 e successivi... ho però visto la funzione SayToInteger, sarà forse coinvolta nel processo?
p.s.: tu scrivi:
"NB. da me non ti aspettare codice già fatto. Quello che vuoi te lo farei in
due minuti, e mi avrebbe impegnato meno tempo che scriverti tutto questo."
Non solo non me lo aspetto, ma non lo voglio. Se poi vedi che la cosa diventa troppo lunga e per il momento brancolo irrimediabilmente nel buio (informaticamente,
s'intende) lascia pure perdere, anche se arrivassi a capire il tutto dovrei comunque studiare il manuale, cosa che devo, tassativamente, fare e finire
entro dicembre.
giuseppe di grande
così sicuramente la cosa è molto più lunga, ma per me è più interessante, e
penso anche per te.
L'uso che vuoi fare di StringToInt è esatto.
Naturalmente, il parametro con la tua stringa col tempo utilizzerai una
variabile.
La differenza tra un intero e una stringa è molto marcata. In una stringa
puoi sì avere un testo che descriva un numero, come "0", ma sarà molto
diverso da una variabile Int che contiene 0. Nel primo caso tu stai
trattando caratteri, sequenze di caratteri, testo e non numeri. Nel secondo
caso hai a che fare con numeri, e non con caratteri. Tu sai addizionare un
testo con un numero? Non penso. Non ci riesce neanche un computer.
Avendo i tuoi tre valori in tre variabili Int, li potrai manipolare più
facilmente:
potresti trasformare quel tempo tutto in secondi;
potresti aggiungere o sottrarre secondi, minuti o ore;
puoi vocalizzare i secondi, i minuti, le ore, solo i secondi se minuti e ore
sono a 0, minuti e secondi se le ore sono a 0, solo ore e minuti per attese
più lunghe, eccetera.
Si può fare anche utilizzando solo la tua stringa di tempo, ma ottimizzare e
velocizzare certe procedure è poi più performante. Ci sono tante strade per
arrivare ad un risultato, ma alcune strade sono più lunghe, altre più corte,
alcune portano solo a quel risultato, altre possono portarti altri vantaggi,
alcune sono sentieri di campagna, altre autostrade a sei corsie, eccetera.
Tutto sta a fare dei compromessi, a capire cosa si vuole, cosa si deve
sviluppare, se si continuerà a sviluppare in futuro, se una determinata
routine dovrà servire anche ad altro. Personalmente ti sto indicando la
strada meno tortuosa che potrà essere utilizzata anche in altri modi.
Torno un attimino alle stringhe e ai numeri.
Dopo tutto questo cosa ti aspetteresti sommando due stringhe così:
"0" + "6" = ?
E poi due interi così:
0 + 6 = ?
Nel primo caso stai unendo due stringhe e avrai il risultato stringa: "06"
Nel secondo caso stai addizionando due numeri, quindi avrai l'intero: 6
E' corretto, vero?
Per Jaws no.
Sappi che Jaws ha un bug enorme e nel primo caso unendo due stringhe di
testo che specificano dei numeri avrai il risultato come se addizionassi
degli interi. Insomma cose raccapriccianti di casa Freedom. [smile]