2014-02-28 127 views
1

我在一个文件夹中有多个rtf文件。我需要在Windows上使用Ruby v1.9.3将它们连接成一个rtf文件。使用Ruby连接多个RTF文件

这是我到目前为止有:

files_to_be_joined = Dir["*.rtf"] 

File.open("Joined.rtf", "w") do |output_file| 
    files_to_be_joined.each do |input_file| 
    File.open(input_file) do |file| 
     file.each { |line| output_file.puts line } 
    end 
    end 
end 

这个工程在机械感:它把所有的RTF文件的文件夹在了一起。当我在文本编辑器中打开Joined.rtf时,可以看到它包含文件夹中的所有rtf文件。但是当我在MS Word中打开Joined.rtf时,我只能看到第一个。

任何建议,将不胜感激。

+1

这取决于你的意思是“连接”。我认为*你实际上是指你想让每个文件的主要内容顺序出现在一个新文件中。 RTF不是纯文本;您只需提取内容并将每个文件的“真实”内容插入到新文件或现有文件中。 –

+0

是的,没错。我希望每个文件的主要内容都按顺序出现在一个新文件中。我不知道如何提取每个文件的“真实”内容。 – Glenn

回答

0

您只能看到第一个文件,因为它包含指示文档结束的分隔符。您需要用页面分隔符替换它和随后的文档标题。出于某种原因,程序可能会在这样的末尾分隔符(例如粘滞便笺)之后添加内容,因此下面的代码将首先从这些不可见的“尾巴”中清理文档,然后正确插入页面分隔符。我一直在使用它将我的笔记导出为PDF(在此之前为RTF),适用于我。

line = /(\r\n|\r|\n)/ 
tail = /#{line}\}#{line}.+$/m 
generator = /\{\\\*\\generator [^\}]+\}/ 
joint = /#{line}\}#{line}\{\\rtf1\\[^\r\n]*#{line}/m 

raw = Dir["*.rtf"].map do |file| 
    raw = File.open(file).read 
    raw.gsub!(tail, "\\1}\\1") 
    raw.gsub(generator, "") 
end.join 

out = File.open("Joined.rtf", "w") 
out.write(raw.gsub(joint, "\\1\\page\\1"))