[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

Iterators and arrays

Clement Ow

4/2/2008 9:53:00 AM

I want to use each index of the array and loop it in such a way that the
path names can be passed into Dir so that i can carry out multiple
copies from different sources. unfortunately, it showed error while
trying to run the script. Any suggestions?


$DEST="U:/test1"

source=["C:/movtest/testing", "C:/movtest", "U:/movtest",
"U:/movtest/new", "U:/movtest/new1"]
j=source.length - 1
i= -1

while i<j

Dir.chdir(source[i])
print Dir.getwd
FileUtils.cp_r Dir.glob('2008*'), $DEST
i+=1

end
--
Posted via http://www.ruby-....

3 Answers

Robert Dober

4/2/2008 11:18:00 AM

0

On Wed, Apr 2, 2008 at 11:53 AM, Clement Ow
<clement.ow@asia.bnpparibas.com> wrote:
> I want to use each index of the array and loop it in such a way that the
> path names can be passed into Dir so that i can carry out multiple
> copies from different sources. unfortunately, it showed error while
> trying to run the script. Any suggestions?
>
>
> $DEST="U:/test1"
>
> source=["C:/movtest/testing", "C:/movtest", "U:/movtest",
> "U:/movtest/new", "U:/movtest/new1"]
> j=source.length - 1
> i= -1
>
> while i<j
>
> Dir.chdir(source[i])
> print Dir.getwd
> FileUtils.cp_r Dir.glob('2008*'), $DEST
> i+=1
>
> end
> --
> Posted via http://www.ruby-....
>
>
You seem to get confused with the indexes, but the idiomatic Ruby code
would rather look like

dest = "u:/..."
sources = %w{ c:/movetest/testing c:/ ... } # unless you have spaces
in the pathes
sources.each do | source |
Dir.chdir source
puts source
FileUtiles.cp_r Dir.glob(...), dest # if this is what you really want
end

HTH
Robert
--
http://ruby-smalltalk.blo...

---
Whereof one cannot speak, thereof one must be silent.
Ludwig Wittgenstein

Robert Klemme

4/3/2008 6:39:00 AM

0

On 02.04.2008 13:17, Robert Dober wrote:
> On Wed, Apr 2, 2008 at 11:53 AM, Clement Ow
> <clement.ow@asia.bnpparibas.com> wrote:
>> I want to use each index of the array and loop it in such a way that the
>> path names can be passed into Dir so that i can carry out multiple
>> copies from different sources. unfortunately, it showed error while
>> trying to run the script. Any suggestions?
>>
>>
>> $DEST="U:/test1"
>>
>> source=["C:/movtest/testing", "C:/movtest", "U:/movtest",
>> "U:/movtest/new", "U:/movtest/new1"]
>> j=source.length - 1
>> i= -1
>>
>> while i<j
>>
>> Dir.chdir(source[i])
>> print Dir.getwd
>> FileUtils.cp_r Dir.glob('2008*'), $DEST
>> i+=1
>>
>> end
>> --
>> Posted via http://www.ruby-....
>>
>>
> You seem to get confused with the indexes, but the idiomatic Ruby code
> would rather look like
>
> dest = "u:/..."
> sources = %w{ c:/movetest/testing c:/ ... } # unless you have spaces
> in the pathes
> sources.each do | source |
> Dir.chdir source
> puts source
> FileUtiles.cp_r Dir.glob(...), dest # if this is what you really want
> end

Inside the block I prefer

Dir.chdir source do
puts source
FileUtiles.cp_r Dir.glob(...), dest
end

which will restore the original current directory. That way, you can
more easily work with relative paths and it might save you from
surprises when in a completely unrelated location of a larger script
current dir is no longer the one that it was on program start. :-)

Kind regards

robert

Clement Ow

4/3/2008 7:13:00 AM

0

Robert Klemme wrote:
> On 02.04.2008 13:17, Robert Dober wrote:
>>> source=["C:/movtest/testing", "C:/movtest", "U:/movtest",
>>>
>> in the pathes
>> sources.each do | source |
>> Dir.chdir source
>> puts source
>> FileUtiles.cp_r Dir.glob(...), dest # if this is what you really want
>> end
>
> Inside the block I prefer
>
> Dir.chdir source do
> puts source
> FileUtiles.cp_r Dir.glob(...), dest
> end
>
> which will restore the original current directory. That way, you can
> more easily work with relative paths and it might save you from
> surprises when in a completely unrelated location of a larger script
> current dir is no longer the one that it was on program start. :-)
>
> Kind regards
>
> robert

The code is actually feasible but for a typo mistake!(Cause there wasnt
a dir named U:\test1) Here's the edited code:

dest=%w[U:/test_1 U:/dest1 U:/dest2 U:/dest3 U:/dest4]
j1=dest.length - 1
i1= 0
source=%w[C:/movtest/testing C:/movtest/testing/new U:/movtest/source
U:/movtest/new U:/movtest/new1]
j=source.length - 1
i= 0
while i<=j && i1<=j1

Dir.chdir(source[i])
print Dir.getwd
print dest[i1]
FileUtils.cp_r Dir.glob('2008*'), dest[i1]
i+=1
i1+=1
end

But is there anyway whereby, I can write all the 'print' to a log file
for reference, just in case there might be an error in copying? And if
possible have some conditions to test if the files did really copy over?
Thanks.

--
Posted via http://www.ruby-....