asp-classic - ASP Readline 非标准行尾

标签 asp-classic readline line-endings

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

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

是否有处理此问题的标准方法?某种页面指令,或文件系统对象上的设置?

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

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

谁有更好的方法来处理这个问题?

最佳答案

没有办法改变 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 文件格式吗?

关于asp-classic - ASP Readline 非标准行尾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1863400/

相关文章:

python - 尝试在 Debian 4.3.2 中安装 Python 2.6.5 时无法构建 readline

Git commit 忽略行尾

sql-server - VBScript-将SHA1作为数字或二进制值存储在SQL Server中

asp.net - 经典 ASP 中的内存监控/泄漏/问题

javascript - 使用 Java 在 asp(经典)循环期间查找数组中的第二个最高值

Linux 将 csv 中的 ^M$ 替换为 $

java - 是否有任何 Java 流输入库保留行结束字符?

asp-classic - 显示当前目录 - 经典 ASP

shell - 编译 Readline 时对 "tputs"的 undefined reference

android - 读取超过 130000 行文本的大型文本文件