我对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文档而不是文本文件?
非常感谢。
答案 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