经典的asp忽略逗号中的逗号标记CSV

时间:2013-11-08 09:49:10

标签: regex csv asp-classic vbscript

我有一个看起来像这样的CSV文件
1,HELLO,英国
2,HELLO1,英国
3,HELLO2,英国
4,HELLO3,英国
5,HELLO4,英国
6,HELLO5,英国
7,HELLO6,英国
8,“HELLO7,HELLO7 ......”,英文
9,HELLO7,英国
10,HELLO7,英国

我想循环遍历这些行并使用逗号分割经典asp函数写入表。当存在语音标记时忽略这些语音标记中的逗号并取出字符串。

<%
dim csv_to_import,counter,line,fso,objFile
csv_to_import="uploads/testLang.csv"   
set fso = createobject("scripting.filesystemobject")
set objFile = fso.opentextfile(server.mappath(csv_to_import))
str_imported_data="<table cellpadding='3' cellspacing='1' border='1'>"

Do Until objFile.AtEndOfStream


  line = split(objFile.ReadLine,",")    
  str_imported_data=str_imported_data&"<tr>"
  total_records=ubound(line)

  for i=0 to total_records
    if i>0 then
     str_imported_data=str_imported_data&"<td>"&line(i)&"</td>"
    else
     str_imported_data=str_imported_data&"<th>"&line(i)&"</th>"
    end if
next
  str_imported_data=str_imported_data&"</tr>" & chr(13)


Loop
str_imported_data=str_imported_data&"<caption>Total Number of Records: "&total_records&"</caption></table>"
objFile.Close
response.Write str_imported_data
%>

1 个答案:

答案 0 :(得分:2)

Don't write your own CSV parser.

你开始“将它拆分为,是要走的路,现在我已经完成了”。然后有人在您的数据中使用逗号,带逗号的字符串被双引号括起来。你是一个聪明的人,所以你计算双引号的数量,如果它们是奇数,你知道你必须逃避逗号,如果它们是偶数,你不必。然后你得到一个包含转义双引号字符的CSV文件...

但是等等!有一个解决方案。对文件使用Database Connection

这将是这样的,但你必须根据自己的情况进行调整:

On Error Resume Next
Const adOpenStatic = 3
Const adLockOptimistic = 3
Const adCmdText = &H0001

Set objConnection = CreateObject("ADODB.Connection")
Set objRecordSet = CreateObject("ADODB.Recordset")

strPathtoTextFile = server.mappath("uploads/")
strFileName = "testLang.csv"

objConnection.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
          "Data Source=" & strPathtoTextFile & ";" & _
          "Extended Properties=""text;HDR=NO;FMT=CSVDelimited"""

objRecordset.Open "SELECT * FROM " & strFileName, _
          objConnection, adOpenStatic, adLockOptimistic, adCmdText

Do Until objRecordset.EOF
    Wscript.Echo "Number: " & objRecordset.Fields.Item(1)
    Wscript.Echo "Greeting: " & objRecordset.Fields.Item(2)
    Wscript.Echo "Language: " & objRecordset.Fields.Item(3)   
    objRecordset.MoveNext
Loop