Aiuto con codice


#1

Ciao ragazzi sono nuovo e volevo chiedere un vostro parere riguardo a un
codice che ho scritto.Il codice è il seguente:

arr=IO.readlines(“prova.txt”)
puts"#{arr[1]}"
case arr[0]
when “ciao come va”
puts “ciao”

else
puts “niente”
end
Nel file prova.txt c’è scritto:
ciao come va
tutto bene

E’ un esempio stupido ma non riesco a fare una cosa.Quello che vorrei
ottenere è che facesse un confronto con il primo elemento dell’array(nel
quale è stato inserito la prima riga del file txt) e che se il confronto
avesse esito positivo,venga digitato ciao.Tuttavia quello che mi viene
digitato è:
tutto bene
niente
è come se non trovasse nulla nell’array e quindi mi dice che non c’è
niente.

Spero di essere stato chiaro.

Ciao a tutti!!!


#2

In fondo ad ogni elemento di arr ci sono i caratteri di terminazione
linea, che variano a seconda del sistema operativo. Poiché
(correttamente) non li vuoi nelle when, devi modificare l’espressione
della case in

case arr[0].chomp

chomp è un metodo di String che per l’appunto rimuove gli eventuali
terminatori.

Paolo

Stefano De nigris wrote:

Ciao ragazzi sono nuovo e volevo chiedere un vostro parere riguardo a un
codice che ho scritto.Il codice è il seguente:

arr=IO.readlines(“prova.txt”)
puts"#{arr[1]}"
case arr[0]
when “ciao come va”
puts “ciao”

else
puts “niente”
end
Nel file prova.txt c’è scritto:
ciao come va
tutto bene

E’ un esempio stupido ma non riesco a fare una cosa.Quello che vorrei
ottenere è che facesse un confronto con il primo elemento dell’array(nel
quale è stato inserito la prima riga del file txt) e che se il confronto
avesse esito positivo,venga digitato ciao.Tuttavia quello che mi viene
digitato è:
tutto bene
niente
è come se non trovasse nulla nell’array e quindi mi dice che non c’è
niente.

Spero di essere stato chiaro.

Ciao a tutti!!!


#3

Ok grazie paolo,questo codice mi ha fatto scemunire per un pomeriggio
intero.

Ciao ciao


#4

Ragazzi ho un altro problema.Ho scritto il seguente codice:
val=primariga.size
sost=primariga[val].split(/\s/)
puts “#{sost}”

e vorrei che “sost” abbia l’ultimo valore dell’array primariga.Tuttavia
mi esce un errore che non riesco a capire:

private method `split’ called for nil:NilClass (NoMethodError)

che cosa sto sbagliando???


#5

Giampiero avevi ragione,non ci avevo pensato che volevo accedere ad un
elemento che non esisteva :D.
Grazie tante.Ciao


#6

sono poco esperto ma mi pare di capire che stai tentando di accedere a
un elemento di array che non esiste;
se val = primariga.size vale 10, questo vuol dire che l’array ha 10
elementi, da primariga[0] a primariga[9]
chiedendo primariga[val] stai chiedendo primariga[10], che non esiste
prova con primariga[last] o primariga[-1]

Stefano De nigris wrote:

Ragazzi ho un altro problema.Ho scritto il seguente codice:
val=primariga.size
sost=primariga[val].split(/\s/)
puts “#{sost}”

e vorrei che “sost” abbia l’ultimo valore dell’array primariga.Tuttavia
mi esce un errore che non riesco a capire:

private method `split’ called for nil:NilClass (NoMethodError)

che cosa sto sbagliando???


#7

Ragazzi ho di nuovo un problema banale,ma nonostante cio non riesco a
risolverlo.Mi sapreste dire il codice che deve usare per poter far fare
la somma tra due numeri che inserisco io nella console.
Ve l’avevo detto che era banale… :D.


#8

Il 10 gennaio 2009 18.21, Luigi P. removed_email_address@domain.invalid ha
scritto:

puts gets.to_i + gets.to_i

se poi hai voglia di effetti speciali puoi dare un’occhiata a readline.


#9

Pietro ma readline non legge i file txt??Che c’entra col fatto
d’inserirli io nella console??


#10

Il giorno 10/gen/09, alle ore 18:01, Stefano De nigris ha scritto:

Ragazzi ho di nuovo un problema banale,ma nonostante cio non riesco a
risolverlo.Mi sapreste dire il codice che deve usare per poter far
fare
la somma tra due numeri che inserisco io nella console.
Ve l’avevo detto che era banale… :D.

puts gets.to_i + gets.to_i


#11

Il 11 gennaio 2009 11.55, Stefano De nigris removed_email_address@domain.invalid
ha scritto:

Pietro ma readline non legge i file txt??Che c’entra col fatto
d’inserirli io nella console??

require ‘readline’

Readline.readline 'ilmioprompt > ’


#12

Stefano De nigris wrote:

Ragazzi ho di nuovo un problema banale,ma nonostante cio non riesco a
risolverlo.Mi sapreste dire il codice che deve usare per poter far fare
la somma tra due numeri che inserisco io nella console.
Ve l’avevo detto che era banale… :D.

fra ignoranti ci si capisce meglio :slight_smile: ricordati sempre che i dati in
input da console sono sempre acquisiti con un newline in fondo, quindi
il seguente codice non funziona

sull’input da console, in tal caso, bosogna fare la chomp, come segue:

puts “Dammi un numero intero”
n = gets.chomp.to_i

vedi:
http://www.ruby-doc.org/docs/Tutorial/part_02/user_input.html
o
http://www.ruby-doc.org/core/classes/String.html#M000834
ciao
Giampiero


#13

Pietro G. wrote:

require ‘readline’

Readline.readline 'ilmioprompt > ’

Pietro ho provato a fare come dici tu,ed esce:
valore_inserito
ilmioprompt > valore_inserito

Cmq ti ringrazio lo stesso…ciao :smiley: :smiley:


#14

ragazzi mi sto arrabbiando con nua stringa di codice che non riesco a
capire il xke non vuole funzionare correttamente.La stringa è la
seguente:

elementi=primariga.to_s
if elementi.include? “=” && “:”
duepunti=elementi.gsub(/[:]/,’’).chop
puts “#{duepunti}”
end

dove primariga va a leggere le frasi su un file txt,tramite
readlines.Quello che voglio che verifichi se all’interno della stringa
ci siano gli elementi = e : e se è vero mi deve stampare lo stesso
elemento,pero senza i due punti.
Ma quello che accade è diverso…o meglio mi stampa a video quello che
io ho detto,in piu stampa anche quelle righe dove ci sono solo i due
punti.
E’ come se capisce che deve vedere entrambi.Come posso risolverlo???


#15

On 1/14/09 4:53 PM, Luigi P. wrote:

puts “#{duepunti}”
end

if condizione # se condizione e’ verificata
fai una cosa
else # altrimenti
fai una altra cosa
end

piu’ che altro

“if f(a) && f(b)” != “if f(a && b)”

Andrea


#16

Il giorno 14/gen/09, alle ore 16:36, Stefano De nigris ha scritto:

ragazzi mi sto arrabbiando con nua stringa di codice che non riesco a
capire il xke non vuole funzionare correttamente.La stringa è la
seguente:

elementi=primariga.to_s
if elementi.include? “=” && “:”
duepunti=elementi.gsub(/[:]/,’’).chop
puts “#{duepunti}”
end

if condizione # se condizione e’ verificata
fai una cosa
else # altrimenti
fai una altra cosa
end

http://pine.fm/LearnToProgram/?Chapter=06


#17

elementi=primariga.to_s
if elementi.include? “=” && “:”
duepunti=elementi.gsub(/[:]/,’’).chop
puts “#{duepunti}”
end

se i due elementi devono essere in sequenza, ovvero prima = e poi :
eventualmente non consecutivi, una prima possibile soluzione, anche se
assai poco elegante, è:
elementi = “AAABBB = UUUU : iiiFF”
riga = elementi
if !(riga.match ‘=’).nil?
riga = $’
if !(riga.match ‘:’).nil?
duepunti=elementi.gsub(/[:]/,’’).chop
puts “#{duepunti}”
end
end
$’ è il testo che segue il testo trovato dalla match


#18

Ciao Stefano

L’and di due oggetti riporta il secondo oggetto se il primo e’ non
nullo, altrimenti nil.

Per questo la sotto-espressione
“=” && “:”
(che viene calcolata prima di invocare il metodo “include?”) vale sempre
“:”


#19

Luigi ho provato come dici tu,ma fa lo stesso…fra poco faro volare un
pc per la prima volta al mondo(anche se mi viene i dubbio che qualcuno
lo abbia gia fatto).
Il fatto è che l’and,cioè && non gli dice che devono esserci entrambi i
caratteri,capito?Forse sbaglio nel scrivere il codice???


#20

On 1/14/09 5:14 PM, Stefano De nigris wrote:

Luigi ho provato come dici tu,ma fa lo stesso…fra poco faro volare un
pc per la prima volta al mondo(anche se mi viene i dubbio che qualcuno
lo abbia gia fatto).
Il fatto è che l’and,cioè&& non gli dice che devono esserci entrambi i
caratteri,capito?Forse sbaglio nel scrivere il codice???

Forse?? Non voglio essere cattivo, ma tra la possibilità che stia
sbagliando Ruby e quella che stai sbagliando tu, mi sembra che si possa
scommettere 1 a infinito :stuck_out_tongue:

Andrea