2013-04-10 73 views
0

我需要傳遞一個字符串對外部文件,該文件包含要在每次出現時執行的替換列表。外部文件替換列表

的替代文件看起來像這樣(我願意在結構上的建議,它可以是一個CSV,YAML一個,等...)

"ipsum" "foobar" 
"elit" "" 
"sit amet" "2312" 

我的Ruby代碼應該是這樣實現的這樣的:

mystring = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam quis elit augue. Nulla tempus magna nec ligula dapibus malesuada. Fusce at orci augue, sit amet suscipit sem. Suspendisse potenti." 

newstring = mystring.somemagichappenshere 

而且newstring值應爲"Lorem foobar dolor 2312, consectetur adipiscing . Aliquam quis augue. Nulla tempus magna nec ligula dapibus malesuada. Fusce at orci augue, 2312 suscipit sem. Suspendisse potenti."

我應該如何實現呢?

回答

2

使用CSV替換值:

require 'csv' 
str = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam quis elit augue. Nulla tempus magna nec ligula dapibus malesuada. Fusce at orci augue, sit amet suscipit sem. Suspendisse potenti." 

replacements = "ipsum,foobar 
elit, 
sit amet,2312" 
#construct a hash from the csv: 
transform_table = Hash[CSV.parse(replacements)] 
#Take the keys from the hash and use them for a regular expression: 
re = Regexp.union(transform_table.keys) 
#Do all substituions in one go: 
p str.gsub(re, transform_table) 
0

這是很簡單的

  1. 讀取文件
  2. 迭代文件中的每一行,每個條目使用mystring.gsub!(find, replace)用替換
+0

當後一個關鍵字與先前的值匹配時,它會失敗。 – mudasobwa 2013-04-10 10:51:39