将非标准化字符串转换为十进制

时间:2016-02-23 19:20:36

标签: for-loop coldfusion switch-statement

我的表格中有一列名为time_required。它包含30min,1H,3H,5-6H,1/2天等字符串。一串不标准的字符串。

我需要将这些字符串转换为十进制值以标准化该表

  • 30分钟将变为0.5,
  • 1H将变为1
  • 3 H将变为3
  • 5-6H将变为5,5.5或6

到目前为止,对于某些价值,比如1/2天,我做了一个转换案例并简单地转换成这样:

<cffunction name="updateRealTime">
    <cfargument name="priorityID" required="yes">
    <cfargument name="realTime" required="yes">

    <cfquery name="qryPriorityList" datasource="NTCBF_PORTAL">
        UPDATE tblPriorityList 
        SET real_time = #arguments.realTime#
        WHERE priority_id = #arguments.priorityID# 
    </cfquery>
</cffunction>

<cfquery name="qry" datasource="#dsn#">
    <!--- not actual query --->
    SELECT * from tbl
</cfquery>


 <cfloop query="qry">
  <cfswitch expression="qry.time_required">
         <!--- 1/2 DAY --->
         <cfcase value="1/2 Day">
            <cfset convertedTime = 4> 
         </cfcase>
        <!--- more cases --->
        ...
        <cfset updateToRealTime(qry.ID,convertedTime)>
    </cfswitch>
</cfloop>

这很简单快捷,因为我的桌子里只有6个不同的盒子。 现在,真正的挑战是其他52个不同的条目(1H,30min,3 H,......)。 对于我来说,如上所述的切换案例是否会更快并列举所有可能的情况来进行转换,或者有更简单的方法来转换所有这些数据?

谢谢!

1 个答案:

答案 0 :(得分:4)

所以我觉得我有一个去,因为它听起来像一个有趣的问题!以下是我提出的建议:

<cfscript>
examples = [
    '30min',
    '1H 30minutes',
    '3 h 30 m',
    '1h 15m',
    '5 days 6 Hours 45 minutes'
];

for (it in examples) {
    minutes = 0;
    parts = rematchnocase('\d+ ?(d|h|m)', lcase(it));
    for (part in parts) {
        amount = reReplace(part, '[^0-9]', '', 'all');
        if (find('m', part)) {
            minutes += amount;
        } else if (find('h', part)) {
            minutes += amount * 60;
        } else if (find('d', part)) {
            minutes += amount * (60 * 24);
        }
    }


    fraction = (minutes % 60) / 60;
    hours = int(minutes / 60);
    decimal = hours + fraction;
    writeOutput('#it# is #minutes# minutes, which is #decimal# hours<br>');
}
</cfscript>

来自跑步的输出可以提供:

  

30分钟是30分钟,这是0.5小时

     

1H 30分钟是90分钟,这是1.5小时

     

3小时30分钟是210分钟,这是3.5小时

     

1小时15分钟是75分钟,这是1.25小时

     

5天6小时45分钟是7605分钟,这是126.75小时

我选择接近它的方式是将其转换为总分钟,然后从那里我可以转换为我想要的任何东西。希望这应该足以让你开始。