【发布时间】:2014-04-24 07:34:30
【问题描述】:
我正在尝试使用 VBScript 读取 CSV 文件,但由于无法识别换行符,因此导致了巨大的问题。我现在的方法是:
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile(server.mappath("my_csv_file.csv"), ForReading)
Do Until objFile.AtEndOfStream
strLine = objFile.ReadLine
arrFields = Split(strLine, ",")
LOOP_STUFF_HERE
Loop
CSV 文件有几行,但问题是它将 CSV 文件全部读取为一个长行,并且每行的最后一项与下一行的第一项合并,因为后面没有逗号最后一行(它是由我的一个客户在 Excel 中创建的,然后发送给我)。我的解决方案是我必须在文本编辑器中打开它,手动在行尾添加一个逗号,然后删除换行符。这从长远来看是行不通的,因为我们正在建立一个自动化系统。
基本上,我需要能够Split 换行符(我尝试过Split(strLine, "\n",但这似乎不起作用),然后一旦它们被换行符拆分,然后拆分他们用逗号。换句话说,它是一个多维数组。
我不知道如何让 VBScript 识别换行符。有任何想法吗?感谢您的帮助。
【问题讨论】:
-
你试过
Split(strLine, CHAR(10))吗? Char(10) 表示换行。 -
文件似乎有问题。如果 32 位窗口在 edit.exe 中打开文件。编辑 /70 /h my_csv_file.csv。状态栏中是字符代码,CR和LF出现音乐符号和菱形。
-
@KayNelson 小修正。
CHAR()是一个 Excel 函数。 VBScript 等效项是CHR()。但我同意你的建议,尽管不需要CHR()。vbCrLf是默认的 line-ender。如果这不起作用,请尝试vbLf(在 Unix 中流行)或vbCr(在 Mac 上流行)。就个人而言,我会在十六进制编辑器中打开文件,看看里面有什么! -
正如@Bond 所说,如果
ReadLine()在一行中显示整个CSV,那么您的CSV 没有使用vbCrLf作为EOL 标记。这为您提供了两个选项尝试vbCr或vbLf而不是Split(strLine, "\n"等。另外同意如果您在十六进制编辑器中打开文件,您可能会更好地了解所需内容。您将寻找0D0A(vbCrLf)、0D(vbCr) 或0A(vbLf)。 -
不,抱歉。我的意思是,只要 CSV 中的每一行都以
vbCrLf结尾,您上面的代码应该 就可以正常工作。由于您的脚本运行不正常,我猜每一行不以vbCrLf结尾。所以ReadLine不适合你。您可能必须阅读整个文件(使用ReadAll函数),然后按vbCr或vbLf拆分以获得每一行。获取免费的十六进制编辑器,例如HxD,然后打开 CSV 以查看正在使用的行尾。
标签: csv vbscript asp-classic