我正在使用 ASP 经典版ReadLine()
文件系统对象的功能。
一切都进展顺利,直到有人在 Mac 上使用 TextEdit 制作了导入文件。
行结尾不相同,并且ReadLine()
读入整个文件,而不是一次只读一行。
有处理这个问题的标准方法吗?某种页面指令,或文件系统对象上的设置?
我想我可以读取整个文件,然后拆分vbLF
,然后对于每个项目,替换vbCR
用“”,然后一次处理一行,但这似乎有点笨拙。
我已经到处寻找这个问题的解决方案,但解决方案都是“不要用 Mac[原文如此] 行结尾保存文件”。
有人有更好的方法来处理这个问题吗?
没有办法改变的行为ReadLine
,它只会将 CRLF 识别为行终止符。因此,唯一简单的解决方案就是您已经描述过的解决方案。
Edit
实际上,ASP 服务器上应该有另一个开箱即用的库,它可能会提供一些帮助。那是ADODB 库。
The 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 作为行结尾?它的 Unix 文件格式使用 LF,不是吗?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)