Aiuto con codice

un leggero miglioramento…

elementi = “AAABBB =: iiiFF”
riga = elementi
r = /=.*:confused:
if !(riga.match r).nil?
duepunti=elementi.gsub(/[:]/,’’).chop
puts “#{duepunti}”
end

Eh lo so…ma cerco di dare la colpa a lui :P.Mi sapresti dire dov’è
l’errore??Io voglio che lui esegua l’if solo se : e = stanno vicini,e
non che come fa lui.

Pietro ti ringrazio,funziona come si deve…

per quanto rigurda le tue domande:
1)mi serve perche voglio eliminare l’ultimo carattere
2)è la stessa cosa,io elimo soltanto i “:”

Cmq ti volevo fare un ultima domanda.Ma che differenza c’è tra usare i
“” e ‘’,cioè prima io ho usato “=” and “:” ma potevo usare anche ‘=’ and
‘:’.Quale è la differenza???

2009/1/14 Stefano De nigris [email protected]:

Eh lo so…ma cerco di dare la colpa a lui :P.Mi sapresti dire dov’è
l’errore??Io voglio che lui esegua l’if solo se : e = stanno vicini,e
non che come fa lui.

elementi = primariga.to_s
if /=:/ =~ elementi
duepunti = elementi.gsub(‘:’, ‘’).chop
puts duepunti
end

però:1) non ho capito perché fai chop
2) occhio che così sostituisce “:” con “”, mentre magari quello che
vuoi è sostituire “=:” con “=” (le cose coincidono solo se non ci sono
: vicino a =).

se quello che vuoi è la seconda, usa

elementi.gsub(“=:”, “=”)

nota anche che scrivere

puts “#{duepunti}”

fa la stessa cosa che

puts duepunti

con la sola differenza che la prima spreca un po’ di risorse
inutilmente.

Pietro scusa se ti risp ora,ma in questi giorni sono stati impegnato con
l’univerisità .Cmq ho provato a fare come dici tu e la differenza sta nel
fatto che le due (’) virgolette fanno stampare tutto quello che ho
scritto io,invece le due apici (") stampano quello che viene eseguito
dalle istruzioni da me scritte.Giusto o ho capito male??? :smiley:

2009/1/16 Stefano De nigris [email protected]:

Cmq ti volevo fare un ultima domanda.Ma che differenza c’è tra usare i
“” e ‘’,cioè prima io ho usato “=” and “:” ma potevo usare anche ‘=’ and
‘:’.Quale è la differenza???

prova queste due righe:

puts ‘#{3 + 3}’

puts “#{3 + 3}”

2009/1/23 Stefano De nigris [email protected]:

Pietro scusa se ti risp ora,ma in questi giorni sono stati impegnato con
l’univerisità.Cmq ho provato a fare come dici tu e la differenza sta nel
fatto che le due (') virgolette fanno stampare tutto quello che ho
scritto io,invece le due apici (") stampano quello che viene eseguito
dalle istruzioni da me scritte.Giusto o ho capito male??? :smiley:

esatto: altro esempio è ‘\n’.

Ok,grazie.Senti ho un’altra curiosità ,è possibile creare un file con il
nome che gli digito io nella console???Cioè:
file=File.new(“nom.txt”,“r”) in questo modo creo un file che ha come
nome nom,ma io invece vorrei che al posto di nom ci fosse la stringa che
digito io.E’ possibile farlo?Se si come si fa?

Ciao a tutti!!!

Ho provato ma niente non funziona, mi dice che non trova un file
simile.Credo che dovrei cmq averlo creato il file txt e poi posso
operarci,non lo crea lui. :frowning:

Stefano De nigris wrote:

Ok,grazie.Senti ho un’altra curiosità ,è possibile creare un file con il
nome che gli digito io nella console???Cioè:
file=File.new(“nom.txt”,“r”) in questo modo creo un file che ha come
nome nom,ma io invece vorrei che al posto di nom ci fosse la stringa che
digito io.E’ possibile farlo?Se si come si fa?

Ciao a tutti!!!

In teoria sì; non l’ho mai fatto, ma dovrebbe essere una cosa del
genere, come logica:

codice
codice

comando “Ehi, utente, scrivi qua il nome del file!”
variabile = input_utente
file=File.new("#{input_utente}",“r”)
codice

Con input_utente eventualmente bonificato da fine riga… o aggiunti,
scusate, ma non ho mai visto molto queste cose ':slight_smile:

Questo accrocchio dovrebbe funzionare se il programma si ferma e resta
in attesa dell’input dell’utente, se passa avanti fregandosene (che
presumo sia ciò che NON fa), bisogna sistemare un po’.

Stefano De nigris wrote:

Ho provato ma niente non funziona, mi dice che non trova un file
simile.Credo che dovrei cmq averlo creato il file txt e poi posso
operarci,non lo crea lui. :frowning:

Prova a fare così:

file=File.new(“#{input_utente}”,“w+”)

“r” è solo in lettura, scusa non mi ero accorto. Oppure opera con
qualche altra opzione, nel caso non voglia aprirlo.

Hai visto questa paginetta:
http://www.mrwebmaster.it/ruby/guide/gestione-file-cartelle-ruby_708.html
?

Il 23 gennaio 2009 11.32, Stefano De nigris [email protected]
ha scritto:

Ho provato ma niente non funziona, mi dice che non trova un file
simile.Credo che dovrei cmq averlo creato il file txt e poi posso
operarci,non lo crea lui. :frowning:

non è che stai provando con File.new(‘nomedelmiofilepreferito’, ‘r’)

???

se è così, non può funzionare, devi usare ‘w’ o ‘rw’.

2009/1/23 Stefano De nigris [email protected]:

Cosa vuole??Xke non funziona??

occhio che gets aggiunge un ritorno a capo al nome del file.

nome=gets.to_s.strip
file=File.new(“#{nome}.txt”,“w+”)

Ho fatto così:

nome=gets.to_s
file=File.new("#{nome}.txt",“w+”)

e mi da questo errore:
prova (questo è quello che io ho
digitato)
prova.rb:2:in initialize': Invalid argument - prova (Errno::EINVAL) .txt from prova.rb:2:innew’
from prova.rb:2

Cosa vuole??Xke non funziona??

From: Pietro G. [email protected]

Cosa vuole??Xke non funziona??

stefano: se eviti le abbreviazioni stile cellullare ti voglio più bene, sii
gentile :*

nn è ke nn si cpcse ma è brutto da lggre :wink:

occhio che gets aggiunge un ritorno a capo al nome del file.

nome=gets.to_s.strip
file=File.new(“#{nome}.txt”,“w+”)

alcune note:

  • perché to_s ? gets restituisce già una stringa
  • per eliminare gli eventuali “a capo” c’è un metodo apposito,
    String#chomp
  • se possibile dovreste sempre usare i metodi per gestire file che usano
    blocchi.
    In questo modo il file viene chiuso automaticamente quando il blocco
    termina e voi non dovete gestirlo a mano.

Cmq, così funziona. Dovrebbe in realtà funzionare anche come era prima
però.
mecbuc:~/tmp rff$ ls
f.rb

mecbuc:~/tmp rff$ cat f.rb
name = gets.chomp
open(name, ‘w+’) do |file|
file.puts(“hello!”)
end

mecbuc:~/tmp rff$ ruby f.rb
output.txt

mecbuc:~/tmp rff$ ls
f.rb output.txt

mecbuc:~/tmp rff$ cat output.txt
hello!

Ok lo farò.Cmq ho provato il codice che mi ha suggerito pietro e
funziona,grazie lo stesso.Un’unica cosa,potresti spiegarmi meglio cosa
fanno queste istruzioni che hai scritto,sarei curioso:

mecbuc:~/tmp rff$ ls

f.rb

mecbuc:~/tmp rff$ cat f.rb
name = gets.chomp
open(name, ‘w+’) do |file|
file.puts(“hello!”)
end

mecbuc:~/tmp rff$ ruby f.rb
output.txt

mecbuc:~/tmp rff$ ls
f.rb output.txt

mecbuc:~/tmp rff$ cat output.txt
hello!

From: Stefano De nigris [email protected]
To: [email protected]
Sent: Friday, 23 January, 2009 15:42:24
Subject: Re: [ruby-it] Aiuto con codice

Ok lo farò.Cmq ho provato il codice che mi ha suggerito pietro e
funziona,grazie lo stesso.Un’unica cosa,potresti spiegarmi meglio cosa
fanno queste istruzioni che hai scritto,sarei curioso:

certo, era il copia-incolla da una sessione in console su linux.

ls è un comando che stampa la lista dei file in una cartella (come dir in
windows/dos)
mentre cat legge i file passati come argomento e li stampa schermo
(starebbe per ‘concat’, nel senso che concatena i vari file)

Il codice ruby in se è semplice

name = gets.chomp
open(name, ‘w+’) do |file|
file.puts(“hello!”)
end

il pezzo tra do…end è il blocco che viene passato al metodo, in pratica
open è

  • come se fosse una funzione/metodo senza nome
  • il pezzo tra | | è come la signature: stabilisce quali siano gli
    argomenti
  • quando la funzione (il blocco) viene eseguita il valore della
    variabile “file” sarà quello passato come argomento al blocco.

Se cè altro che nn è chiaro chiedi pure.

Ragazzi ho un problema e non riesco a capire come risolverlo.Oggi ho
scritto questo segmento di codice:

d=primariga[1]
uguale=d.index “=”
puts “#{d[uguale…d.size]}”

vorrei che venga visualizzato sulla console un pezzo di una
frase.Essendo che la frase iniziale prima dell’uguale(=) può essere più
corta o più lunga,ho pensato di rendere più dinamico il codice andando a
trovare l’indice del valore uguale,e da quall’indice in poi farmi
visualizzare la parte che m’interessa.Tuttavia quando ho mandato in run
mi è uscito un errore mai visto fino ad ora:

bad value for range (ArgumentError)
from verifica.rb:8:in `each’
from verifica.rb:8

Ho anche sostituito al posto dell’uguale il numero dell’indice e
funziona,quindi credo che l’errore sta nell’uguale.Come posso
risolverlo???

Ah ok ti ringrazio per la spiegazione,è stata tutta chiara.

Ciao ciao!!!

visualizzare la parte che m’interessa.Tuttavia quando ho mandato in run
mi è uscito un errore mai visto fino ad ora:

bad value for range (ArgumentError)
from verifica.rb:8:in `each’
from verifica.rb:8

Ho anche sostituito al posto dell’uguale il numero dell’indice e
funziona,quindi credo che l’errore sta nell’uguale.Come posso
risolverlo???

il “.” ha meno priorità del ‘…’ quindi ruby sta cercando di costruire un
intervallo che che va da un numero a una stringa e quindi fallisce.

Metti una parentesi 1…(d.size) e dovrebbe funzionare. Spero :slight_smile:

PS
se hai altre domande che non c’entrano con il topic originale di questo
thread creane uno nuovo con un titolo appropriato, così se qualcuno ha lo
stesso problema può cercarlo e trovare la sua soluzione facilmente.