我正在使用文件系统对象的ASP Classic ReadLine()
功能
一直都很好,直到有人在TextEdit中的Mac上创建导入文件。
行结尾不一样,ReadLine()
读取整个文件,而不是一次读取一行。
有没有一种标准的处理方式?某种页面指令,或文件系统对象上的设置?
我想我可以读取整个文件,并在vbLF
上拆分,然后对于每个项目,将vbCR
替换为“”,然后一次一个地处理这些行,但是看起来有点笨拙。
我已经搜遍了这个问题的解决方案,但解决方案都是“不要用Mac [sic]行结尾保存文件。”
任何人都有更好的方法来解决这个问题吗?
答案 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
库。