2014-02-28 175 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"))