# Problema con cicli

**URL:** <https://www.ruby-forum.com/t/problema-con-cicli/204858>\
**Category:** IT\
**Created:** [March 23, 2011, 2:13pm UTC](https://www.ruby-forum.com/t/problema-con-cicli/204858 "2011-03-23T14:13:29Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![luislavena](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/l/0ea827/32.png) [@luislavena](https://www.ruby-forum.com/u/luislavena)\
**Post date:** [March 23, 2011, 2:13pm UTC](https://www.ruby-forum.com/t/problema-con-cicli/204858/1 "2011-03-23T14:13:29Z")

</div>

Salve a tutti,  
premetto di essere un neofita di ruby.  
Ecco, in breve cosa devo fare. Ho alcune cartelle con dentro un numero x  
di file, mi verrà fornito un file (un csv) con una parte del nome di  
alcuni file e io devo copiarli in un’altra cartella.  
Io ho risolto così: creo un array con tutti i file a disposizione, leggo  
le singole righe del file fornito e poi vedo se all’inerto dell’array  
con tutti i file delle cartelle è presente il file.

Il codice che ho implementato è il seguente:

count = 0  
for path in folder\_list  
tmp = path.path + “/\*\*/_._”  
file = Dir.glob(tmp)  
files[count] = file  
count += 1  
end

fileline = IO.readline(path\_del\_file)  
fileline.each do |line|  
field = line.split(’;’)  
files.each do |y|  
y.each do |x|  
tmp1 = x.upacase  
tmp2 = field[1].upcase  
if (tmp1.match(tmp2)) then  
— copia —  
end  
end  
end  
end

Ed ecco il problema: se nel file con i nomi c’è una sola linea il tutto  
funziona, ma se metto due o più linee copia solo il file dell’ultima  
riga.

Qualche idea sul perchè?

Grazie per l’attenzione

Elias

---

<div class="post-metadata">

**Author:** ![mizar](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/71e660/32.png) [@mizar](https://www.ruby-forum.com/u/mizar)\
**Post date:** [March 23, 2011, 2:19pm UTC](https://www.ruby-forum.com/t/problema-con-cicli/204858/2 "2011-03-23T14:19:57Z")

</div>

Il 23/03/2011 14:13, Elias I. ha scritto:

> field = line.split(‘;’)
> 
> Ed ecco il problema: se nel file con i nomi c’ una sola linea il tutto  
> funziona, ma se metto due o pi linee copia solo il file dell’ultima  
> riga.
> 
> Qualche idea sul perch?
> 
> Grazie per l’attenzione
> 
> Elias

provato con la gemma Tampax???

😉 Luca

---

<div class="post-metadata">

**Author:** ![mizar](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/71e660/32.png) [@mizar](https://www.ruby-forum.com/u/mizar)\
**Post date:** [March 24, 2011, 9:01am UTC](https://www.ruby-forum.com/t/problema-con-cicli/204858/3 "2011-03-24T09:01:42Z")

</div>

Si si, ho provato anche la gemma Lines e CAREFREE, ma ancora non  
funziona.

Mi chiedevo non è che sia il match che crea dei problemi??

Elias

---

<div class="post-metadata">

**Author:** ![mizar](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/71e660/32.png) [@mizar](https://www.ruby-forum.com/u/mizar)\
**Post date:** [March 24, 2011, 11:12am UTC](https://www.ruby-forum.com/t/problema-con-cicli/204858/4 "2011-03-24T11:12:16Z")

</div>

Elias I. wrote in post #988869:

> fileline = IO.readline(path\_del\_file)  
> fileline.each do |line|  
> …  
> end
> 
> Ed ecco il problema: se nel file con i nomi c’è una sola linea il tutto  
> funziona, ma se metto due o più linee copia solo il file dell’ultima  
> riga.

Se non erro IO.readline ritorna una sola linea come String.  
Dovresti usare IO.readlines che le ritorna tutte come Array.  
Per confondere le cose, apparentemente String ha un metodo each e quindi  
il programma non ti va in errore. Ho provato con ruby 1.8.7:

$ irb

> > “abc”.each { |x| puts x }  
> > abc  
> > =\> “abc”

Paolo

---

<div class="post-metadata">

**Author:** ![mizar](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/71e660/32.png) [@mizar](https://www.ruby-forum.com/u/mizar)\
**Post date:** [March 24, 2011, 2:14pm UTC](https://www.ruby-forum.com/t/problema-con-cicli/204858/5 "2011-03-24T14:14:42Z")

</div>

Il 24/03/2011 12:28, Elias I. ha scritto:

> > =\> “abc”  
> > (ad esempio if (tmp1.match(“APP”)) then) la risposta corretta, nel  
> > senso che per ogni riga del file che gli passo mi d in output lo stesso  
> > file presente nell’array con i file.
> 
> Grazie per l’aiuto
> 
> Eliasbianchi

prova a vedere se ci sono spazi o altri caratteri di tabulazione nel  
file che vengono passati alla stringa, potrebbe essere il motivo per cui  
il confronto non funziona.

luca.

ps: scusa la battuta precedente ma era troppo allettante 😛

---

<div class="post-metadata">

**Author:** ![mizar](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/71e660/32.png) [@mizar](https://www.ruby-forum.com/u/mizar)\
**Post date:** [March 24, 2011, 12:28pm UTC](https://www.ruby-forum.com/t/problema-con-cicli/204858/6 "2011-03-24T12:28:50Z")

</div>

Paolo M. wrote in post #989010:

> Se non erro IO.readline ritorna una sola linea come String.  
> Dovresti usare IO.readlines che le ritorna tutte come Array.  
> Per confondere le cose, apparentemente String ha un metodo each e quindi  
> il programma non ti va in errore. Ho provato con ruby 1.8.7:
> 
> $ irb
> 
> > > “abc”.each { |x| puts x }  
> > > abc  
> > > =\> “abc”
> 
> Paolo

Grazie Paolo.  
Purtroppo uso già la funzione IO.readlines (è stato un mio errore nella  
trascrizione).  
Ho fatto un po’ di prove e il ciclo funziona, ma entra nel blocco “if  
(tmp1.match(tmp2)) then” solo all’ultima riga. Ho anche provato a usare  
altre funzioni (include? e scan), ma il risultato non cambia.  
Ancora una cosa provando a fare il match con una stringa prestabilita  
(ad esempio if (tmp1.match(“APP”)) then) la risposta è corretta, nel  
senso che per ogni riga del file che gli passo mi dà in output lo stesso  
file presente nell’array con i file.

Grazie per l’aiuto

Elias

---

<div class="post-metadata">

**Author:** ![mizar](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/71e660/32.png) [@mizar](https://www.ruby-forum.com/u/mizar)\
**Post date:** [March 24, 2011, 3:07pm UTC](https://www.ruby-forum.com/t/problema-con-cicli/204858/7 "2011-03-24T15:07:57Z")

</div>

> prova a vedere se ci sono spazi o altri caratteri di tabulazione nel  
> file che vengono passati alla stringa, potrebbe essere il motivo per cui  
> il confronto non funziona.
> 
> luca.

Ho appena verificato, a parte il “;” e il carattere di nuova linea non  
ci sono caratteri strani nel file.

> ps: scusa la battuta precedente ma era troppo allettante 😛  
> Nessun problema anche se ho provato a cercare un gemma Tampax.. non si  
> sia mai:)
