使用Ruby连接多个RTF文件

时间:2014-02-28 17:09:51

标签: ruby concatenation rtf

我在一个文件夹中有多个rtf文件。我需要在Windows上使用Ruby v1.9.3将这些文件连接成一个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 个答案:

答案 0 :(得分:0)

您只看到第一个文件,因为它包含指示文档结尾的分隔符。您需要使用页面分隔符替换此文档标题和后续文档标题。由于某种原因,程序可能会在这样的结束分隔符之后添加内容(例如Sticky Notes),因此下面的代码将首先从这些不可见的“尾部”清理文档,然后插入页面分隔符正确。我一直用它将我的笔记导出为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"))