2014-12-07 69 views
0

對不起,但我對Coldfusion非常新,我需要一些幫助。Coldfusion ReReplace查找號碼並用新號碼替換

我有一個包含配方方法的字符串。 「熱烤箱至200℃,然後等等等等,直到內部溫度的措施60C」

  1. 我需要一個動態計算值的字符串中替換的數值,然後它會是這樣的:「熱火的烤箱200c(392f),然後等到內部溫度測量60c(140f)「。

這些數字值可以出現在字符串中的任意位置和多次。 從C到F轉換的計算是C * 9/5 + 32.

所以我需要ReReplace字符串中的所有數字與動態計算的新值。

我希望這很清楚。

+1

CFLib上的replaceWithCallback()UDF應該可以幫助您執行所需的操作:http://www.cflib.org/udf/replaceWithCallback – 2014-12-07 21:37:42

回答

2

這是我做的方法。

<cfscript> 
    sString = "Heat your oven to 200c and then cook till the temp internally is 60c"; 

    aFind = ReMatchNoCase("\d+c",sString); 

    x = 0; 
    while(x < arrayLen(aFind)){ 
    x++; 
    nCalc = RematchNoCase("\d+",aFind[x])[1]; 


    nCalc = nCalc*9/5+32; 
    sString = ReReplaceNoCase(sString,aFind[x],'#aFind[x]# (#ncalc#F)'); 
    } 

    writeOutput(sString); 
</cfscript> 

亞當斯鏈接UDF可能會更好,但我想這個代碼示例,作爲進去一看,你會如何完成它沒有第三方。

+0

非常棒的Jarede。完美的作品。謝謝! – 2014-12-08 05:54:24

+0

你需要在那裏使用'reReplaceNoCase()'嗎?這只是一個直線替換是不是?此外,*在最低限度*這應該被封裝在一個函數。我也會考慮把溫度轉換也放在它自己的功能中,以使它更簡潔的代碼。它*也*使用'while()'循環遍歷數組似乎有點奇怪。你爲什麼不使用「for-in」循環? – 2014-12-08 08:34:47

+0

@AdamCameron是正確的,因爲這應該是它自己的功能,並且溫度轉換也應該外推到它自己的函數中。 while循環只是因爲我沒有在工作中使用for-in來存儲數組(因爲我不能),所以我只是想在工作中如何去做。 – Jarede 2014-12-08 10:45:01