2013-09-25 2 views
0

Долгосрочный lurker, впервые опубликовывая! Я новичок в Ruby, поэтому мне бы очень понравилась эта помощь.Скопировать список файлов из одной директории в другую - Как поместить текстовый файл в массив?

У меня есть большой текстовый файл со списком файлов, разделенных перерывом, так это выглядит следующим образом:

ARO_9501.jpg 
ARO_9506.jpg 
IMG_1499.jpg 
IMG_1511.jpg 

Как я могу получить этот текстовый файл в массив, так что я могу назвать .each на он и скопировать файлы в другой каталог?

ответ

0

Вы можете пойти так же с помощью IO::readlines:

ar = File.open("/home/kirti/ruby/foo.txt","r") do |fil| 
    fil.readlines.map(&:strip) 
end 
p ar 
# >> ["ARO_9501.jpg", "ARO_9506.jpg", "IMG_1499.jpg", "IMG_1511.jpg"] 

В соответствии с @steenslag комментария:

ar = File.readlines("/home/kirti/ruby/foo.txt").map(&:chomp) 
ar # => [ "ARO_9501.jpg", "ARO_9506.jpg", "IMG_1499.jpg", "IMG_1511.jpg"] 
+1

'readlines'already дает массив (и' map' дает вам другое); нет необходимости выделять массив и выталкивать значения в третьем массиве. 'ar = File.readlines ("/home/kirti/ruby ​​/ foo.txt "). map (&: chomp)' – steenslag

+0

@steenslag Я искал это .. Но не мог вспомнить, когда писал предыдущие код .. Спасибо за ваш комментарий. –

+0

При использовании File.readlines какое имя массива он отображает? Эта строка кода работает, но я не уверен, что она сохраняет имена файлов? – theartofbeing

0

Это, как я обычно делаю:

fileNameArray = File.read("/path/to/file.txt").split("\n") 

Или, если вам просто нужно перебирать имена файлов и не обязательно содержать массив, содержащий имена (это Похоже, у вас нет), я обычно использую это:

File.read("/path/to/file.txt").each_line do |line| 
    # do operations using line 
end 

Docs:
IO::read (File расширяет IO)
String.split() и each_line()

Смежные вопросы