Il 2 marzo 2009 15.56, Stefano De nigris [email protected] ha
scritto:
/\bas\b/ (\b � delimitatore di parola, word delimiter)?
Se faccio cosi lui mi cercherà solo le parole fatte da “as”???
esattamente, troverà “Application as blabla”, ma non “ananas assale
casa”.
Scusa perche non c’è questo elemento???Quando faccio partire il
programma l’if viene eseguito,quindi significa che lo trova “as”.
tu lavori su due oggetti completamente diversi: uno è primariga, che è
un array di lunghezza 1, l’altro è una stringa.
ad esempio, 1 e [1] sono diversi, non hanno assolutamente niente in
comune; tanto per dire: 1 + 1 fa 2, [1] + [1] fa [1, 1].
ma d’altronde: una volta che fai la ricerca di as, perch� fai di nuovo
la ricerca di as?
basterebbe:
if as = /\bas\b/ =~ primariga.to_s
puts as
end
Ma se faccio cosi l’if posso fare poi: puts primariga[as]???
no, o meglio: non ha senso, perché primariga è un array con un solo
elemento, quindi solo primariga[0] è definito.
ma è inutile eseguire più volte il metodo to_s sullo stesso oggetto, e
d’altronde è un modo brutto di procedere.
la cosa più semplice è che assegni primariga[0] a qualche variabile, che
so:
riga = primariga[0]
ora riga contiene una stringa, quindi puoi fare:
if as = /\bas\b/ =~ riga
puts riga[as]
end
nota però che il risultato sarà deludente: verrà stampato
97
questo perché riga è una stringa, ma riga[as] è un carattere, e
precisamente il carattere che si trova alla posizione in cui inizia
“as”, ovvero è la lettera a, ovvero il carattere 97.
puoi vederlo eseguendo, in irb:
97.chr
spero di essere stato d’aiuto.
p.s. continuo a sostenere che con le regular expression non è
possibile scrivere un parser degno di questo nome, tanto per dire, non
è possibile controllare il bilanciamento delle parentesi; però, se lo
scopo è solo didattico, senza dubbio è un ottimo esercizio.
pietro