ColdFusion Reg表达式

时间:2015-10-23 13:59:17

标签: regex coldfusion

我有一个由标题行(字段列表)和几个detalis行组成的csv文件(每个客户的详细信息)。

此文件包含大量未使用的文件,因此我尝试重建一个干净的文件,其中只放置了我需要的字段。

为此我循环标题行,得到我需要的字段的索引(位置)并将其存储在变量中:

<cfset FirstName_Pos = listfind(header,'FirstName',';')>
<cfset LastName_Pos = listfind(header,'LastName',';')>

分隔的标题字段是';'字符。

之后我检索了所有需要的字段的位置,我创建了一个新文件以放入每行所需的信息

<cffile action="rename" source="#LocalPath#/#FileName#" destination="#LocalPath#/Source_#FileName#">
<cfset NewFile = FileOpen('#LocalPath#/#FileName#','Append')>
<cfset Newheader = 'FirstName,LastName'>
<cfset fileWriteLine(NewFile, Newheader)>

<cfloop file="#LocalPath#\Source_#FileName#" index="line">
<cfset count = count + 1>
<cfif count GTE 2>
    <cfset FirstName= listgetat(line,FirstName_Pos,';',1)>
    <cfset LastName= listgetat(line,LastName_Pos,';',1)>
    <cfset detail = '#FirstName#,#LastName#'>
    <cfset fileWriteLine(NewFile, detail)>
</cfif>

问题是在原始文件的详细信息行中有一些字段写成如下:

"#08/04/14 23:00;08/05/14 23:00#" 

即该字段包含';'字符是我在listgetat函数中使用的分隔字符字符

因此,我在变量FirstName和LastName中获得了非期望的值。

考虑到原始文件包含以下信息:

USERID;Post;FirstName;Date1;Mail;Date2;LastName;Telephone
123;Engineer;Alan;"#08/04/14 23:00;08/05/14 23:00#";alan@yahoo.fr;"#10/04/14 11:00;10/05/14 11:00#";Jones;0624262589

我明白了:

FirstName;LastName
Alan;"#10/04/14 11:00

而不是

FirstName;LastName
Alan;Jones

我理解循环原始文件的所有细节行并替换';'带有空格或空白字符的charcater仅在具有相同格式“#08/04/14 23:00; 08/05/14 23:00#”的字段上使用正则表达式。 (当然,从一个字段到另一个字段以及从一个字段到另一个字段的日期更改)

    <cfloop file="#LocalPath#\Source_#FileName#" index="line">
<cfset newline = rereplace(line,'"##[^\w.];[^\w.]##"','"##[^\w.] [^\w.]##"','all')>
<cfset count = count + 1>
    <cfif count GTE 2>
        <cfset FirstName= listgetat(newline,FirstName_Pos,';',1)>
        <cfset LastName= listgetat(newline,LastName_Pos,';',1)>
        <cfset detail = '#FirstName#,#LastName#'>
        <cfset fileWriteLine(NewFile, detail)>
    </cfif>
</cfloop>

它不起作用,因为我使用的正则表达式似乎完全错误。也许是因为我复制#符号来处理coldfusion语法错误

任何人都可以了解我必须用来处理这种情况的正则表达式吗?

提前致谢

这是原始文件的示例

USERID;Post;FirstName;Date1;Mail;Date2;LastName;Telephone
123;Engineer;Alan;"#08/04/14 23:00;08/05/14 23:00#";alan@yahoo.fr;"#10/04/14 11:00;10/05/14 11:00#";Jones;0624262589

1 个答案:

答案 0 :(得分:0)

解析原始文件并将所有出现的0; 0(数字;数字)替换为0,0(数字,数字)。那么你的原始解决方案应该可以正常工作。

regex =&#34; / d; / d&#34;跟踪他们我相信。