2013-11-02 42 views
0

輸入文件是一個excel文件,excel文件具有諸如author,2ndauthor,3rdauthor的頭文件。Ruby on Rails簡單輸出樣式修復

所以輸入XLSX看起來像

Title Author  2ndAuthor  3rdAuthor 4thAuthor 
E=MC^2 Einstein 
DNA  Watson  Crick 
AAA  BB   BBB   CCC 

,但目前在軌道上的程序的紅寶石確實像

if not contents["#{record.title} (#{record.author} paper)"] 
    contents += "*[[#{record.title} (#{record.author} paper)]]\r\n" 
end 

所以Ruby程序的輸出看起來像

E=MC^2 (Einstein paper) 
DNA (Watson paper) 
AAA (BB paper) 

但我想包括2作者,3rdauthor,...獲得

E=MC^2 (Einstein paper) 
DNA (Watson and Crick paper) 
AAA (BB, BBB, and CCC paper) 

因此,只有當有3個或3個以上的作者時,纔在作者之間添加逗號。

有沒有什麼好的方法可以做到這一點?

加入問題

如果

"#{title} (#{author} paper)" 

被生成

AAA (BB paper) 

然後將

"#{title}" + " ([#{author},#{2ndauthor},#{3rdauthor},#{4thauthor}].delete_if{|val| val.nil?}.to_sentence" + " paper)" 

生成

AAA (BB, BBB, and CCC paper) 

+0

如果你喜歡的答案,請通過點擊下面回答數字支票接受。 –

回答

1

這段代碼應該很近,但我沒有真正運行它。它利用兩個不錯的功能,Rails的陣列:: to_sentence和紅寶石陣:: delete_if

# code assumes record member names are the same as input xlsx 
# change if otherwise. 
# code also assume blank columns will be nil in record. If not, change delete_if block 
# accordingly 
# also assume there is some array of records 

contents = "" 
records.each do |record| 
    contents += "\r\n" if contents != "" 
    contents += "#{record.Title} (#{[record.Title, record.Author, record.2ndAuthor, record.3rdAuthor, record.4thAuthor].delete_if{|val| val.nil?}.to_sentence}) paper" 
end 
+0

@Steve_Wilhem謝謝,但正如我寫的「and」應該在最後一位非空作者之前出現,而「,」應該在非最後作者之後出現,如果作者的總數是3或更多。我猜你的代碼目前沒有考慮到這一點? – user1849133

+0

它應該,這是句子所要做的。 –

+0

@Steve_Wilhem它應該看起來像脫氧核糖核酸(沃森和克里克紙),所以它應該像標題(作者和第二作者論文)是否to_sentence也添加括號後面的「紙」和第一作者? – user1849133