2014-12-07 72 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