我有一个由标题行(字段列表)和几个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
答案 0 :(得分:0)
解析原始文件并将所有出现的0; 0(数字;数字)替换为0,0(数字,数字)。那么你的原始解决方案应该可以正常工作。
regex =&#34; / d; / d&#34;跟踪他们我相信。