Iterators and arrays

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-forum.com/.

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

···

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-forum.com/\.

--
http://ruby-smalltalk.blogspot.com/

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

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. :slight_smile:

Kind regards

  robert

···

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-forum.com/\.

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

Robert Klemme 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. :slight_smile:

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.

···

On 02.04.2008 13:17, Robert Dober wrote:

--
Posted via http://www.ruby-forum.com/\.