2009-12-07 35 views
3

我正在使用文件系统对象的ASP Classic ReadLine()函数。
所有工作都非常棒,直到有人在Mac上使用TextEdit创建导入文件。ASP Readline非标准行结束符

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

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

我想,我可以在整个文件中读取,并各执vbLF,然后对每个项目,以“”替换vbCR,然后处理线,一次一个,但似乎有点缺憾。

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

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

回答

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 

注意,默认字符集是unicode的,所以你需要指定正确的字符集,如果它不是Unicode正在使用的文件。我在文档中使用“Unicode”这个词,意思是它实际上意味着UTF-16。这里的一个优点是ADODB Stream可以处理UTF-8,与Scripting库不同。

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

+0

你可能在Unix上关于Mac和LF上的CR的问题上很失败。说实话,我是通过2个远程桌面会话来调试这个东西,剪贴板没有被复制。我只知道有差异,我很早就在调试会议上询问了什么样的机器创建了这个文件。 安东尼,我只是想再次表示感谢你的时间,并认为你把你的答案。对此,我真的非常感激。 – 2009-12-10 02:09:23

+0

Mac OS X是一个Unix。这是经典的Mac OS使用CR(尽管一些应用程序仍然如此,我认为)。 – 2013-06-19 07:38:17