迭代并打印ruby中所有文件的内容

时间:2017-02-16 08:22:17

标签: ruby

我对Ruby世界很陌生,所以如果它是一个简单的查询,请耐心等待。

对于我的一个作业,我希望读取文件夹中的所有文本文件的内容(仅限顶级),并以附加或合并的方式将文件内容重定向到单个输出文件。

我期待以下格式:

输出文件

<input type="text" id="NirID" name="NirID" class="form-control" value="@Session["id"]"/>

我设法写下面的脚本,但输出文件是空的。请提出任何建议。

File Name: 1st file name

all its contents
====================================
File Name: 2nd file name

all its contents
====================================
File Name: 3rd file name

all its contents
====================================
   ....
   ....


====================================

另外,是否可以将上述格式的输出重定向到word文档而不是文本文件?

非常感谢。

1 个答案:

答案 0 :(得分:1)

这应该有用。

文件名为空,因为您有puts "File Name:"#{file}。这种方式#{file}不会被插值,因为它不在双引号内。

此外,您没有收到该文件的内容,因为您刚刚使用了puts而不是puts line,这就是您想要的。

File.open('C:\Users\darkop\Desktop\final_output.txt','a') do |final|
  @files = Dir.glob("D:\text\*.txt")
  for file in @files
    text = File.open(file, 'r').read.sub(/#$/?\z/, $/)
    text.each_line do |line|
      puts "File Name: #{file}"
      puts
      puts line
      final << line
      puts "=" * 20 
    end
  end
end

- 编辑 -

由于您不熟悉Ruby,最好使用each循环,而不是for .. in循环。另外,只需为Word文档指定带有.doc扩展名的输出名称。

File.open('C:\Users\darkop\Desktop\final_output.doc','a') do |final|
  @files = Dir.glob("D:\text\*.txt")
  @files.each do |file|
    text = File.open(file, 'r').read.sub(/#$/?\z/, $/)
    text.each_line do |line|
      puts "File Name: #{file}"
      puts
      puts line
      final << line
      puts "=" * 20 
    end
  end
end