分享
 
 
 

ASP 3.0高级编程(二十二)

王朝asp·作者佚名  2006-12-16
窄屏简体版  字體: |||超大  

5.5.1 创建TextStream对象的方法

有三个常用方法用于创建或打开一个文本文件并返回TextStram对象

方 法

说 明

CreateTextFile

(filename,overwrite,unicode)

在磁盘上用指定的文件名filename创建一个新文本文件,并返回一个与该文件对应的TextStream对象。如果可选的overwrite参数设置为True,将覆盖具有同样路径的同名文件。缺省的overwrite是False。如果可选的unicode参数设置为False,该文件的内容将存储为Unicode格式。缺省的unicode是False

OpenTextFile

(filename,iomode,create,format)

打开或创建(如果不存在)一个名为filename的文件,并且返回与该文件对应的TextStream对象。filename参数可以包含绝对或相对路径。iomode参数说明需要的访问类型。容许值是ForReading(1)(缺省)、ForWriting(2)、ForAppending(8)。写入或追加到一个不存在的文件时,如果create参数设置为True,将创建一个新文件。缺省的create是False。format参数说明了读或写文件时的数据格式。容许值是TristateFalse(0)(缺省),说明用ASCII数据格式;TristateTrue(-1)说明用Unicode数据格式;TristateUseDefault(-2)说明数据使用系统缺省的格式

OpenAsTextStream

(iomode,format)

打开一个指定的文件并且返回一个TextStream对象,可用于对该文件的读、写或追加。iomode参数说明了需要的访问类型。容许值是ForReading(1)(缺省)、ForWriting(2)、ForAppending(8)。Format参数说明了读写文件的数据格式。容许值是TristateFalse(0)(缺省),说明用ASCII数据格式;TristateTrue(-1)说明用Unicode数据格式;TristateUseDefault(-2)说明使用系统缺省的格式

上面列出的方法在FileSystemObject、Folder和File对象中的实现有所不同。

方 法

FileSystemObject对象

Folder对象

File对象

CreateTextFile

OpenTextFile

OpenAsTextStream

因此,可以使用这些方法创建一个新的文本文件,或者打开一个已存在的文件。则可得到与该文件相应的一个TextStream对象,可以使用TextStream对象的属性和方法操作文件。

1. 创建新的文本文件

可以用CreateTextFile方法创建新的文本文件,或覆盖一个已存在的文件。返回的TextStream对象可用来读写文件。

首先创建一个FileSystemObject对象,用来创建TextStream对象。下面这个例子是用VBScript创建一个“普通的”(即非Unicode)名为MyFile.txt的文件,并覆盖已存在的同名文件:

Set objFSO = Server.CreateObject("Scripting.FileSystemObject")

Set objTStream = objFSO.CreateTextFile("C:\TextFiles\MyFile.txt", True, False)

这同样可用JScript实现:

var objFSO = Server.CreateObject('Scripting.FileSystemObject');

var objTStream = objFSO.CreateTextFile('C:\TextFiles\MyFile.txt', true, false);

一旦创建了该文件,就可以使用objTStream(它是对一个TextStream对象的引用)对文件进行操作。

2. 打开已存在的文本文件

OpenTextFile方法用于打开一个已有的文本文件。它返回一个TextStream对象,可用这个对象对文件读或追加数据。

同样,首先创建一个FileSystemObject对象,然后用其创建一个TextStream对象。下面的VBScript程序例子打开一个名为MyFile.txt的文件,准备读出其内容:

Set objFSO = Server.CreateObject("Scripting.FileSystemObject")

Set objTStream = objFSO.OpenTextFile("C:\TextFiles\MyFile.txt", ForReading)

用JScript:

var objFSO = Server.CreateObject('Scripting.FileSystemObject');

var objTStream = objFSO.OpenTextFile('C:\TextFiles\MyFile.txt', ForReading);

为了写入一个文件或创建一个不存在的文件,可以用以下代码:

' In VBScript:

Set objTStream = objFSO.OpenTextFile("C:\TextFiles\MyFile.txt", ForWriting, True)

// In JScript:

var objTStream = objFSO.OpenTextFile('C:\TextFiles\MyFile.txt', ForWriting, true);

如果要打开一个已有的Unicode文件,准备对其追加数据,但是不创建不存在的文件,可以用:

' In VBScript:

Set objTStream = objFSO.OpenTextFile("C:\TextFiles\MyFile.txt", ForReading, _

False, TristateTrue)

// In JScript:

var objTStream = objFSO.OpenTextFile('C:\TextFiles\MyFile.txt', ForReading, _

fasle, TristateTrue);

3. 作为一个TextStream对象打开一个File对象

可用File对象的OpenAsTextStream方法打开与该对象相应的文件,并且返回一个能对该文件进行读、写和追加的TextStream对象。所以,给定一个File对象(这种情况下不是FileSystemObject对象)——objFileObject,可作为一个“普通的”(非Unicode)TextStream对象打开它,以供追加文件内容:

' In VBScript:

Set objTStream = objFileObject.OpenAsTextStream(ForAppending, False)

// In JScript:

var objTStream = objFileObject.OpenTextFile(ForAppending, false);

注意,使用这种方法不需要文件名,因为程序的执行通过引用File对象进行,并且没有create参数,因为该文件必须已存在,如果想从一个新的空的文件开始,可以用:

' In VBScript:

Set objTStream = objFileObject.OpenAsTextStream(ForWriting)

// In JScript:

var objTStream = objFileObject.OpenTextFile(ForWriting);

如果想读取该文件:

' In VBScript:

Set objTStream = objFileObject.OpenAsTextStream(ForReading)

// In JScript:

var objTStream = objFileObject.OpenTextFile(ForReading);

5.5.2 TextStream对象成员概要

TextStream对象的全部属性和方法的列表。下面将简短介绍各个重要的成员的细节。

1. TextStream对象的属性

TextStream的属性提供有关文件内文件指针当前位置的信息,如表5-15所示。注意,所有的属性是只读的。

表5-15 TextStream对象的属性及说明

属 性

说 明

AtEndOfLine

如果文件位置指针在文件中一行的末尾则返回True

AtEndOfStream

如果文件位置指针在文件的末尾则返回True

Column

从1开始返回文件中当前字符的列号

Line

从1开始返回文件中当前行的行号

AtEndOfLine和AtEndOfStream属性仅对以iomode参数为ForReading的方式打开的文件可用,否则将会出错。

2. TextStream对象的方法

TextStream对象的方法如表5-16所示:

表5-16 TextStream对象的方法及说明

方 法

说 明

Close()

关闭一个打开的文件

Read(numchars)

从文件中读出numchars个字符

ReadAll()

作为单个字符串读出整个文件

ReadLine()

作为一个字符串从文件中读出一行(直到回车符和换行)

Skip(numchars)

当从文件读出时忽略numchars个字符

SkipLine()

当从文件读出时忽略下一行

Write(string)

向文件写入字符串string

WriteLine(string)

向文件写入字符串string(可选)和换行符

WriteBlankLines(n)

向文件写入n个换行符

||||||3. 写文本文件

一旦使用CreateTextFile、OpenTextFile或OpenAsTextStream方法以及ForWriting或ForAppending参数,创建一个对应于某个文件的TextStream对象,可以用下面的VBScript程序写文件和关闭文件:

' In VBScript:

objTStream.WriteLine "At last I can create files with VBScript!"

objTStream.WriteLine

objTStream.WriteLine "Here are three blank lines:"

objTStream.WriteBlankLines 3

objTStream.Write "... and this is "

objTStream.WriteLine "the last line."

objTStream.Close

或者用JScript:

// In JScript:

objTStream.WriteLine('At last I can create files with JScript! ');

objTStream.WriteLine();

objTStream.WriteLine('Here are three blank lines: ');

objTStream.WriteBlankLines(3);

objTStream.Write('... and this is ');

objTStream.WriteLine('the last line. ');

objTStream.Close();

4. 读文本文件

一旦使用CreateTextFile、OpenTextFile或OpenAsTextStream方法以及ForReading参数,创建一个对应于某个文件的TextStream对象,可以用下面的VBScript程序读文件和关闭文件:

' In VBScript:

'read one line at a time until the end of the file is reached

Do While Not objTStream.AtEndOfStream

'get the line number

intLineNum = objTStream.Line

'format it as a 4-character string with leading zeros

strLineNum = Right("000" & CStr(intLineNum), 4)

'get the text of the line from the file

strLineText = objTStream.ReadLine

Response.Write strLineNum & ": " & strLineText & "<BR>"

Loop

objTStream.Close

或用JScript:

// In JScript:

// read one line at a time until the end of the file is reached

while (! objTStream.AtEndOfStream) {

// get the line number

intLineNum = objTStream.Line;

// format and convert to a string

strLineNum = '000' + intLineNum.toString();

strLineNum = substr(strLineNum, strLineNum.length – 4, 4)

// get the text of the line from the file

strLineText = objTStream.ReadLine();

Response.Write(strLineNum + ': ' + strLineText + '<BR>');

}

objTStream.Close();

5.5.3 TextStream对象举例

为了了解使用TextStream对象操作磨灭文件的几种方式,本书提供了一个VBScript示例页面,该页使用了大量的上述的代码。从示例的Chapter05主菜单页,选择链接“Working With the TextStream Object”打开show_textstream.asp页面。

该页显示了存储在磁盘上名为MyFile.txt的文件的文本内容。在<TEXTAREA>控件里显示的文本内容允许进行编辑,并且下面有三个按钮。三个按钮的作用分别是用<TEXTAREA>控件的内容更新(即取代)最初的文本,在已有文件内容的后面添加文本,或用初始的缺省内容重写文件,如图5-15所示:

TextStream对象示例页面

1. 读取已存在的文本文件的内容

每次载入该页面,将打开文本文件并将读取的内容置入<TEXTAREA>控件。注意我们如何使用Server.MapPath方法得到文件MyFile.txt的绝对物理路径,该文件与示例页面在同一目录下。下面的程序创建FileSystemObject实例:

<%

strTextFile = Server.MapPath("MyFile.txt")

'create an instance of a FileSytemObject object

Set objFSO = Server.CreateObject("Scripting.FileSystemObject")

与书中本部分的大多数其他示例一样,该页包含一个<FORM>段以保存该页面的HTML控件。ACTION是当前页面,因此窗体的内容送回到同一页面。

每次载入该页面,<TEXTAREA>控件用文本文件的当前内容填充:

<FORM ACTION="<% = Request.ServerVariables("SCRIPT_NAME") %>" METHOD="POST">

The contents of the disk file <B><% = strTextFile %></B> are:<P>

<TEXTAREA NAME="txtContent" ROWS="10" COLS="50" WRAP="PHYSICAL">

<%

'open the text file as a TextStream object

Set objTStream = objFSO.OpenTextFile(strTextFile, ForReading)

'read one line at a time until the end of the file is reached

Do While Not objTStream.AtEndOfStream

'get the line number

intLineNum = objTStream.Line

'format and convert to a string

strLineNum = Right("00" & CStr(intLineNum), 3)

'get the text of the line from the file

strLineText = objTStream.ReadLine

Response.Write strLineNum & ": " & strLineText & vbCrLf

Loop

objTStream.Close

%>

</TEXTAREA><P>

由上面程序可知道如何打开文本文件进行读取,遍历整个文件每次读取一行(而不是作为一个字符串读出整个文件)。这是因为要添加自己的行号,行号不属于该文件的文本。对从该文件读出的每行(读之前),检索并且格式化Line属性并创建一个三位数字的行号。然后把行编号和文本行放置页面的<TEXTAREA>控件内。

2. 更新文本文件的内容

当点击页面的Update按钮时(一般是在编辑了<TEXTAREA>控件里的文本以后),将把<TEXTAREA>控件里的内容重新写入到该文本文件内。为此,该页有相应的一些ASP代码,在创建HTML控件以前检验Request.Form集合,查看点击的是哪一个按钮(如果有的话),然后就重新载入该页。

如果点击Update按钮,搜集<TEXTAREA>控件的内容作为一个字符串,分离这个字符串使之成为独立文本选择的数组,并且打开文本文件准备重写其内容,然后遍历刚刚创建的数组,按行号循环写入该行的内容:

'look for a command sent from the FORM section buttons

If Len(Request.Form("cmdUpdate")) Then

'Get contents of TEXTAREA control

strNewText = Request.Form("txtContent")

'Split it into an array of lines at each carriage return

arrLines = Split(strNewText, vbCrLf)

'Open the text file for writing, which replaces all existing content

Set objTStream = objFSO.OpenTextFile(strTextFile, ForWriting)

For intLine = 0 To UBound(arrLines)

strThisLine = arrLines(intLine)

'Write out each line in turn as long as it’s got a line number

If Len(strThisLine) > 4 Then objTStream.WriteLine Mid(strThisLine, 6)

Next

objTStream.Close

End If

HTML<TEXTAREA>控件可在返回的Value中增加额外字符,这依赖于原始HTML页内的内容格式和WRAP属性的设置。特别是应在ASP脚本结束定界符“%>”后立即写上</TEXTAREA>标记,以防止增加一个额外的回车符号。即使用:

%></TEXTAREA><p>

而不使用:

%>

</TEXTAREA><P>

3. 向文本文件追加内容

当点击Append按钮时,可对已有的文件追加内容,与修改该文件内容类似,如图5-16所示。区别是打开该文件是为了追加而不是为了改写文件。调用OpenTextFile方法时可增加额外参数,防止在指定的文件2不存在时创建新文件。

If Len(Request.Form("cmdAppend")) Then

'append contents of TEXTAR

[1] [2] 下一页

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有