Variabili e manipolazione stringhe, dove sbaglio?

Il subject non è dei migliori, ma non sapevo come scriverlo, mi è
capitata una cosa strana:
In rails ricevo da una form una stringa (contenente una data in formato
GGMMAAAA) che viene inserita in un db mysql (e fin quì tutto ok) io ho
bisogno di usare la stessa data(piu che altro la stringa corrispondente)
sia nel formato inserito, sia in formato MMGG.
Allora cosa ho fatto, nel mio controller ho scritto le seguenti cose:

data_localcopy = @m.header.data
dataMMGG = data_localcopy.slice!(0…3).scan(/.{2}/).reverse.to_s

Ora il problema assurdo è che la data MMGG va benissimo, se però piu
avanti nel programma provo a visualizzare @m.header.data adesso ritorna
solo AAAA.
E anche in console ho lo stesso comportamento…

Loading development environment (Rails 2.3.2)

m=Manifest.find(id=3)
=> #<Manifest id: 3, nome: “OSHIMANA”, created_at: “2009-08-12
07:40:22”, updated_at: “2009-08-12 07:40:22”>

m.header.data
=> “12082009”

d=m.header.data
=> “12082009”

d2=m.header.data
=> “12082009”

dataMMGG = d.slice!(0…3).scan(/.{2}/).reverse.to_s
=> “0812”

d
=> “2009”

d2
=> “2009”

Sbaglio io qualcosa? c’è qualcosa che non capisco nell’assegnare le
variabili? in fin dei conti io non vado neanche a manipolare
direttamente @m.header.data ma assegno il suo valore ad un’altra
variabile

Ciao Luca :smiley:

Tutti i metodi che finiscono col ‘!’ (ad esempio slice!) modificano
l’oggetto che li invoca; es:

str = “ciao”
str.gsub!(“o”,“oooo”)
puts str

ciaoooo

inoltre ti suggerisco di usare Date.strptime per fare un lavoro più
pulito…

Date.strptime(“10122009”,“%d%m%Y”).strftime(“%m%g”)

Sandro

2009/8/12 Luca C. [email protected]

Luca C. wrote:

data_localcopy = @m.header.data
dataMMGG = data_localcopy.slice!(0…3).scan(/.{2}/).reverse.to_s

Sbaglio io qualcosa? c’è qualcosa che non capisco nell’assegnare le
variabili? in fin dei conti io non vado neanche a manipolare
direttamente @m.header.data ma assegno il suo valore ad un’altra
variabile

prova
data_localcopy = @m.header.data.clone

Sandro P. wrote:

Ciao Luca :smiley:

Tutti i metodi che finiscono col ‘!’ (ad esempio slice!) modificano
l’oggetto che li invoca; es:

str = “ciao”
str.gsub!(“o”,“oooo”)
puts str

ciaoooo

Doh! è vero!!!
che idiota che sono… la cosa bella è che me ne sono accorto solo ora
di averla scritta in quel modo (e oltretutto non ricordo piu neanche
perchè… ho proprio bisogno di un pò di vacanza…

inoltre ti suggerisco di usare Date.strptime per fare un lavoro pi�
pulito…

Date.strptime(“10122009”,"%d%m%Y").strftime("%m%g")

Questo volevo vederlo successivamente, per adesso come l’ho scritta io
mi torna ancora meglio, cmq grazie per la dritta…
E soprattutto grazie per avermi fatto notare una cosa che non riuscivo
assolutamente a vedere pur avendola in bella vista! sono proprio
stordito…

Luca