Iterators and arrays

C

Clement Ow

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)
print Dir.getwd
FileUtils.cp_r Dir.glob('2008*'), $DEST
i+=1

end
 
R

Robert Dober

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)
print Dir.getwd
FileUtils.cp_r Dir.glob('2008*'), $DEST
i+=1

end

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
 
R

Robert Klemme

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)
print Dir.getwd
FileUtils.cp_r Dir.glob('2008*'), $DEST
i+=1

end

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
 
C

Clement Ow

Robert said:
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)
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.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,995
Messages
2,570,236
Members
46,825
Latest member
VernonQuy6

Latest Threads

Top