# Variabili e manipolazione stringhe, dove sbaglio?

**URL:** <https://www.ruby-forum.com/t/variabili-e-manipolazione-stringhe-dove-sbaglio/173627>\
**Category:** IT\
**Created:** [August 12, 2009, 10:16am UTC](https://www.ruby-forum.com/t/variabili-e-manipolazione-stringhe-dove-sbaglio/173627 "2009-08-12T10:16:35Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![lucac81](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/l/71e660/32.png) [@lucac81](https://www.ruby-forum.com/u/lucac81)\
**Post date:** [August 12, 2009, 10:16am UTC](https://www.ruby-forum.com/t/variabili-e-manipolazione-stringhe-dove-sbaglio/173627/1 "2009-08-12T10:16:35Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![lucac81](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/l/71e660/32.png) [@lucac81](https://www.ruby-forum.com/u/lucac81)\
**Post date:** [August 12, 2009, 10:21am UTC](https://www.ruby-forum.com/t/variabili-e-manipolazione-stringhe-dove-sbaglio/173627/2 "2009-08-12T10:21:44Z")

</div>

Ciao Luca 😃

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. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)

---

<div class="post-metadata">

**Author:** ![lucac81](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/l/71e660/32.png) [@lucac81](https://www.ruby-forum.com/u/lucac81)\
**Post date:** [August 12, 2009, 10:23am UTC](https://www.ruby-forum.com/t/variabili-e-manipolazione-stringhe-dove-sbaglio/173627/3 "2009-08-12T10:23:13Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![lucac81](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/l/71e660/32.png) [@lucac81](https://www.ruby-forum.com/u/lucac81)\
**Post date:** [August 12, 2009, 10:28am UTC](https://www.ruby-forum.com/t/variabili-e-manipolazione-stringhe-dove-sbaglio/173627/4 "2009-08-12T10:28:57Z")

</div>

Sandro P. wrote:

> Ciao Luca 😃
> 
> 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
