?? qach03.asp
字號:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
<HEAD>
<TITLE>如何將一整個文字檔,載入 TextBox 文字框之中 ?</TITLE>
<META NAME="Author" CONTENT="KJ Wang">
<META NAME="GENERATOR" CONTENT="Mozilla/3.01Gold (Win95; I) [Netscape]">
</HEAD>
<BODY TEXT="#000000" BGCOLOR="#FFFFFF" LINK="#0000EE" VLINK="#808080" ALINK="#FF0000">
<P>中文問題之 Q&A (3) - </P>
<H2 ALIGN=CENTER>如何將一整個文字檔 , 載入 TextBox 文字框之中 ? </H2>
<CENTER><P ALIGN=CENTER><A HREF="#More">(98/01/04 補充說明)</A></P></CENTER>
<H2 ALIGN=CENTER>
<HR WIDTH="100%"></H2>
<TABLE>
<TR>
<TD ALIGN=CENTER VALIGN=TOP><IMG SRC="Q.gif" HEIGHT=29 WIDTH=21 ALIGN=CENTER></TD>
<TD VALIGN=TOP WIDTH="35"></TD>
<TD VALIGN=TOP>如何將一整個文字檔 , 載入 TextBox 文字框之中 , 我的程式碼如下:
<UL>
<ADDRESS><FONT COLOR="#800000">Open "c:\ABC.TXT" For Input As
#1 <BR>
text1.Text = Input(LOF(1), 1) <BR>
Close #1</FONT></ADDRESS>
</UL>
<P>在檔案很小的情況下可以達成 , 但在一個 500 bytes 的文字檔中卻不行 ,
會出現「輸入已超過檔案結尾」的訊息 。 </P>
<P>
<HR WIDTH="100%"></P>
</TD>
</TR>
<TR>
<TD VALIGN=TOP><IMG SRC="A.gif" HEIGHT=22 WIDTH=24></TD>
<TD VALIGN=TOP></TD>
<TD VALIGN=TOP>這個問題也與中文有關 , LOF() 函數所傳回之檔案長度是以 byte
為單位 , 但 Input() 函數讀取檔案之資料卻以「字元組」為單位 , 假設有一檔案其內容有
"中英Mixed" 幾個字 , 則 LOF() 的傳回值等於 9 , 但是當 Input()
讀取 7 個位元組之後 , 就已經完全讀取檔案中的 9 個 bytes 了 , 因此繼續讀取剩馀的
(9-7) bytes , 就會出現「輸入已超過檔案結尾」的訊息 。
<P>解決此一問題的方法 , 首先須將讀取檔案的程式段修改如下:</P>
<UL>
<ADDRESS><FONT COLOR="#800000">Dim barr() As Byte </FONT></ADDRESS>
<ADDRESS><FONT COLOR="#800000">barr = InputB(LOF(1), 1) </FONT></ADDRESS>
</UL>
<P>如此可將檔案以 byte 為單位加以讀到 barr 的「Byte 陣列」中 , 然後使用以下方法將
barr 轉換成一般字串 , 即可再指定給 TextBox:</P>
<UL>
<ADDRESS><FONT COLOR="#800000">' 將 Byte 陣列 barr 轉換成字串 S</FONT></ADDRESS>
<ADDRESS><FONT COLOR="#800000">S = ""</FONT></ADDRESS>
<ADDRESS><FONT COLOR="#800000">For i = LBound(barr) To UBound(barr)</FONT></ADDRESS>
<UL>
<ADDRESS><FONT COLOR="#800000">If barr(i) >= 128 Then</FONT></ADDRESS>
<UL>
<ADDRESS><FONT COLOR="#800000">S = S + Chr(CLng(barr(i)) * 256 + barr(i
+ 1))</FONT></ADDRESS>
<ADDRESS><FONT COLOR="#800000">i = i + 1</FONT></ADDRESS>
</UL>
<ADDRESS><FONT COLOR="#800000">Else</FONT></ADDRESS>
<UL>
<ADDRESS><FONT COLOR="#800000">S = S + Chr(barr(i))</FONT></ADDRESS>
</UL>
<ADDRESS><FONT COLOR="#800000">End If</FONT></ADDRESS>
</UL>
<ADDRESS><FONT COLOR="#800000">Next </FONT></ADDRESS>
</UL>
<FONT COLOR="#800000"></FONT></TD>
</TR>
</TABLE>
<P><A NAME="More"></A><B><FONT COLOR="#FF0000"><FONT SIZE=+1>98/01/04 補充說明</FONT></FONT></B>:除了以上方法之外,以下是更快速的計算長度方法:</P>
<UL>
<PRE><FONT SIZE=+1><FONT COLOR="#800000"> Dim barr() As Byte
Open "c:\ABC.TXT" For Input As #1
barr = InputB(LOF(1), 1)
Text1.Text = StrConv(barr, </FONT><FONT COLOR="#FF0000">vbUnicode</FONT><FONT COLOR="#800000">)
Close #1</FONT></FONT>
</PRE>
</UL>
<P>重點仍然在於 StrConv, 此一函數可以直接將 Byte Array 中的字串( 中文占用
2 bytes、英文占用 1 byte) 直接轉成中英文都占用 2 bytes 的字串。</P>
<CENTER><P>
<HR WIDTH="100%"> <FORM><INPUT type=button value= "上一頁" Onclick="history.back();"> <INPUT type=button value="kj首頁" onclick=" parent.location='http://www.kj.com.tw'"></FORM></P></CENTER>
</BODY>
</HTML>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -