qach03.asp

来自「ASPWeb数据库范例总览」· ASP 代码 · 共 114 行

ASP
114
字号
<!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&amp;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 &quot;c:\ABC.TXT&quot; 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() 函数读取档案之资料却以「字元组」为单位 , 假设有一档案其内容有
&quot;中英Mixed&quot; 几个字 , 则 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 = &quot;&quot;</FONT></ADDRESS>

<ADDRESS><FONT COLOR="#800000">For i = LBound(barr) To UBound(barr)</FONT></ADDRESS>

<UL>
<ADDRESS><FONT COLOR="#800000">If barr(i) &gt;= 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 &quot;c:\ABC.TXT&quot; 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 + =
减小字号Ctrl + -
显示快捷键?