?? vb5提示錯誤輸入超出文件尾.txt
字號:
首先感謝你寄來了相關(guān)的程序片斷。我經(jīng)常收到一些關(guān)于程序設(shè)計的問題,可連一行代碼都沒提供,只有出錯信息,真不知如何下手。正是借助你的程序,我一下子就看出了問題,否則我的解答可能是一堆廢話了。很明顯問題出在Input語句,但我們得從VB處理字符串的方式講起。早期的VB是采用單字節(jié)處理方式(通常也稱為ANSI方式),也就說一個英文字母用一個字節(jié)表示,一個漢字算兩個字節(jié),當(dāng)然這樣就可能出現(xiàn)半個漢字的問題。從VB 4.0起,VB采用了一種新的處理方式,即內(nèi)部采用Unicode方式,即不論英文字母還是漢字,一律用兩個字節(jié)表示,但Unicode還不夠普及,所以VB只是在其內(nèi)部完全使用Unicode,而在外部仍轉(zhuǎn)換為人們習(xí)慣的ANSI方式,但在字符串處理上與先前的版本有所不同。例如:在中文Windows或英文Windows外掛RichWin 97中,Len("電子&電腦")=5(這里的&號為半角字符),而在以前的版本或純英文Windows中Len("電子&電腦")=9。除了Len、Left、Right等字符串函數(shù)受此影響外,Input函數(shù)也受此影響。Input函數(shù)的第一個參數(shù)是要讀入的字符數(shù),它采用的是和Len一樣的計數(shù)方式,即一個英文字母算一個字符,而一個漢字(兩個字節(jié))算一個字符。這看起來是個好主意,你不會讀入半個漢字,但實際上糟透了,因為VB的LOF函數(shù)和FileLen函數(shù)都返回的是字節(jié)數(shù),VB中沒有一個能區(qū)分漢字和英文字母的LOF函數(shù)或FileLen函數(shù)!如果你測試文件d:\test1.txt全部是英文,那么你的這段程序可以正確運行,盡管你沒有寄來測試文件,但我可以和你打賭,這個文件中有中文。如果你的文件中有100個漢字,那么LOF函數(shù)和FileLen函數(shù)返回文件長度200個字符,執(zhí)行Input(200, filenum1),VB讀到第100個漢字時就把文件讀完了,所以提示錯誤:"輸出超出文件尾"。可能會有人想,把LOF函數(shù)和FileLen函數(shù)返回文件長度除以2不就行了。是的,如果你的文件中只包括全角字符,那么這么改就對了,但我們平時接觸的很多文件都是全角半角混雜的。VB提供了InputB函數(shù),它可以按字節(jié)數(shù)讀入文件,但實際上這個函數(shù)有錯誤,如果你用它讀入的文件,那么你得到的可能是象"??????"這樣的字符串。我想很多用戶都見過這種奇怪的情況。Line Input語句就沒有這個問題,因為它不計數(shù),只看文件中是否有回車和換行,但Line Input語句比Input語句慢得多。怎么解決這個問題呢,我有一個辦法不見得好,但可以應(yīng)急。把Open打開文件的方式由Input改為Binary方式,即
Open "d:\test1.txt" For Binary As filenum1
然后,使用Get語句代替Input語句:
TextLine = Space(LOF(filenum1))
Get filenum1, , TextLine
這個語句速度同Input函數(shù)相當(dāng),而沒有前述的問題。
<END>
在vb6中可以用strconv(input(filename),vbUnicode),這可能更好!
<END>
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -