在ASP中解析CSV文件时遇到问题

时间:2013-11-21 15:19:17

标签: parsing csv asp-classic vbscript

我有一个需要上传到网站数据库的CSV文件。 CSV是一个普通的逗号分隔文件,但我遇到的问题是某些字段在文本中有逗号。文本中包含逗号的大多数字段都被引号括起来,因此我假设可以使用某些字段。以下是我目前的代码:

set objFile = server.CreateObject ("Scripting.FileSystemObject")
set objFileTextStream = objFile.OpenTextFile(file)

'skip first line as those are headers
objFileTextStream.skipLine 

Do While objFileTextStream.AtEndOfStream <> True 

strLine = objFileTextStream.ReadLine

strLinePart = split(strLine,",") 

'Will have code to insert data in to the database here

Loop 

objFileTextStream.Close
Set objFileTextStream = Nothing

非常感谢任何帮助......

1 个答案:

答案 0 :(得分:4)

使用.CSV文件的最佳方法是通过ADO文本驱动程序(start here)。它们甚至可以用于更复杂的数据(例如嵌入式换行,UTF-8,奇怪的分隔符或行结尾)。

然后可以通过执行SQL语句(“SELECT / INSERT INTO ... IN”,“LOAD DATA INFILE ...”或DBMS支持的任何内容)而不是编写循环来将.CSV表导入DBMS。 / p>

但是:“如果[仅]文本中包含逗号的大多数字段都被引号括起来”,那么你就麻烦了。即使是“滚动你自己的”解析器也依照法律“垃圾进,垃圾出”。如果您在“,”上拆分()并获得超过预期的元素,则只有(超级)人可以将部件分配到正确的列。

更新wrt评论:

坏行

a,b,c,...

可能意味着:

"a,b","c",...

"a","b,c",...

人类,解析器或RegExp需要非常具体的附加信息来确定哪种替代方案是正确的。

如果您不能强制您的数据源提供符合标准的.CSV,您应该将(子)任务“将垃圾变换为'真实'.CSV”分离为具有自己的开发过程和测试的独立过程。然后,您可以使用功能更强大的工具(Perl's CSV modulesome CSharp libraries/projects,...),和/或甚至让人类查看关键案例。