3

我正在使用ReadLine()文件系统对象的 ASP Classic 函数。
在有人在 Mac 上使用 TextEdit 制作导入文件之前,一切都运行良好。

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

有处理这个的标准方法吗?某种页面指令,或文件系统对象上的设置?

我想我可以读入整个文件,然后拆分vbLF,然后对于每个项目,vbCR用“”替换,然后一次处理一行,但这似乎有点笨拙。

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

任何人都有更好的方法来处理这个问题?

4

1 回答 1

4

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

编辑

实际上,在 ASP 服务器上应该有另一个开箱即用的库,它可能会提供一些帮助。那就是 ADODB 库。

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

看看这个例子: -

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 文件格式不是吗?

于 2009-12-08T09:14:27.523 回答