2009-12-07 56 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