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

Parsing 在ASP中解析CSV文件时遇到问题,parsing,csv,asp-classic,vbscript,Parsing,Csv,Asp Classic,Vbscript,我有一个CSV文件的产品,需要上传到网站数据库。 CSV是一个普通的逗号分隔文件,但我遇到的问题是,一些字段的文本中有一个逗号。文本中大多数带有逗号的字段都用引号括起来,因此我认为可以使用引号。以下是我目前的代码: set objFile = server.CreateObject ("Scripting.FileSystemObject") set objFileTextStream = objFile.OpenTextFile(file) 'skip first line as those

我有一个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
set objFile=server.CreateObject(“Scripting.FileSystemObject”)
设置objFileTextStream=objFile.OpenTextFile(文件)
'跳过第一行,因为它们是标题
objFileTextStream.skipLine
当objFileTextStream.AtEndOfStream为True时执行
strLine=objFileTextStream.ReadLine
strLinePart=拆分(strLine,“,”)
'将有代码在此处向数据库中插入数据
环
objFileTextStream.Close
设置objFileTextStream=Nothing

非常感谢您的帮助……

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

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

但是:“如果[只有]大多数文本中有逗号的字段都用引号括起来了”,你就有麻烦了。即使是一个“自己滚”的解析器也遵循“垃圾输入,垃圾输出”的法律。如果您在“,”上拆分()并获得超过预期的元素,则只有(超级)人员才能将这些部分分配到正确的列

更新wrt评论:

糟糕的争吵

a,b,c,...
这可能意味着:

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

"a","b,c",...
一个人、一个解析器或一个RegExp需要非常具体的附加信息来决定哪一个选项是正确的


如果您无法强制数据源提供符合标准的.CSV,则应将(子)任务“将垃圾转换为“real.CSV”分离为一个独立的过程,该过程具有自己的开发过程和测试。然后,您可以使用功能更强大的工具(,…),甚至让一个人来查看关键案例。

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

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

但是:“如果[只有]大多数文本中有逗号的字段都用引号括起来了”,你就有麻烦了。即使是一个“自己滚”的解析器也遵循“垃圾输入,垃圾输出”的法律。如果您在“,”上拆分()并获得超过预期的元素,则只有(超级)人员才能将这些部分分配到正确的列

更新wrt评论:

糟糕的争吵

a,b,c,...
这可能意味着:

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

"a","b,c",...
一个人、一个解析器或一个RegExp需要非常具体的附加信息来决定哪一个选项是正确的


如果您无法强制数据源提供符合标准的.CSV,则应将(子)任务“将垃圾转换为“real.CSV”分离为一个独立的过程,该过程具有自己的开发过程和测试。然后,您可以使用功能更强大的工具(,…),甚至让一个人来查看关键案例。

您可以尝试将其视为数据库,而不是使用Scripting.FileSystemObject。但有一件事需要注意,确保文件末尾没有不可见的字符(空格、换行符)。查看此链接并向下滚动至“您也可以打开文本文件…”您可以尝试将其视为数据库,而不是使用Scripting.FileSystemObject。但有一件事需要注意,确保文件末尾没有不可见的字符(空格、换行符)。查看此链接并向下滚动至“您也可以打开文本文件…”