ASP Readline非标准线路结尾

时间:2009-12-07 22:36:45

标签: asp-classic readline line-endings

我正在使用文件系统对象的ASP Classic ReadLine()功能 一直都很好,直到有人在TextEdit中的Mac上创建导入文件。

行结尾不一样,ReadLine()读取整个文件,而不是一次读取一行。

有没有一种标准的处理方式?某种页面指令,或文件系统对象上的设置?

我想我可以读取整个文件,并在vbLF上拆分,然后对于每个项目,将vbCR替换为“”,然后一次一个地处理这些行,但是看起来有点笨拙。

我已经搜遍了这个问题的解决方案,但解决方案都是“不要用Mac [sic]行结尾保存文件。”

任何人都有更好的方法来解决这个问题吗?

1 个答案:

答案 0 :(得分:4)

无法更改ReadLine的行为,它只会将CRLF识别为行终止符。因此,唯一简单的解决方案就是您已经描述过的解决方案。

修改

实际上,在ASP服务器上应该提供另一个可以提供帮助的库。那是ADODB库。

ADODB.Stream对象具有LineSeparator属性,可以分配10或13来覆盖它通常使用的默认CRLF。该文档不完整,因为它没有描述如何将其与ReadText一起使用。您可以通过传递-2作为参数来获取ReadText方法以从流中返回下一行。

看看这个例子: -

Dim sLine
Dim oStreamIn : Set oStreamIn = CreateObject("ADODB.Stream")

oStreamIn.Type = 2 '' # Text
oStreamIn.Open 
oStreamIn.CharSet = "Windows-1252"
oStreamIn.LoadFromFile "C:\temp\test.txt"
oStreamIn.LineSeparator = 10 '' # Linefeed

Do Until oStreamIn.EOS
  sLine = oStreamIn.ReadText(-2)
  '' # Do stuff with sLine
Loop

oStreamIn.Close

请注意,默认情况下,CharSet是unicode,因此如果文件不是Unicode,则需要分配文件正在使用的正确CharSet。我使用“Unicode”这个词的意思是文档确实意味着UTF-16。这里的一个优点是ADODB Stream可以处理UTF-8,而不像Scripting库。

顺便说一句,我认为MAC使用CR作为行结尾?它使用LF的Unix文件格式不是吗?