§5.顺序文本文件
一、顺序文本文件概念
一组组字符序列以其ASCII码存放到磁盘上,称作文本文件。顺序文本文件在磁盘上是一个个ASCII码连续存放的,中间不留空白。每遇一个<CR>,称为一个记录。记录中的逗号、将记录区分为字段。顺序文本文件的记录是不等长的(每个记录的字符个数可以不同)。
二、顺序文本文件命令
将一个个记录送入磁盘叫建立文件;从磁盘文件中读出一个个记录,叫检索文件。建立或检索文件均需通过相应的DOS命令进行。
1.OPEN
格式:OPEN文件名[,Vv][,Ss][,Dd]
功能:为指定的文件名准备一个缓冲区,以便作为该文件读写时的通道。本命令会将读写指针指向该文件的开始处(0号字节)。
2.WRITE
格式:WRITE文伴名[,Bb]
功能:使其后的PRINT输出内容经由缓冲区送至指定的文件,而不是送往屏幕(或打印机)。
B选项是在大写字母B之后紧跟一个非负整数,以指明从该文件的第几个字符开始写起。B选项省缺时,相当于取B0(即b=0)。
WRITE指定的文件必须是已被打开的;任何一个DOS命令或INPUT语句将会撤消WRITE的功能。
3.READ
格式:READ文件名[,Bb]
功能:使其后的INPUT语句从指定的磁盘文件中读入数据,而不是从键盘上读入数据。
B选项的含义同上。
READ只能从已打开的文件中读取数据。任何一个延迟执行的DOS命令均可撤消READ的功能。
4. CLOSE
格式:CLOSE[文件名]
功能:关闭指定的文件,释放缓冲区。命令中不带文件名时,关闭全部已打开的文件,释放全部缓冲区。
所谓关闭文件,就是使内存中的BASIC程序和磁盘上的文件脱离联系,终止它们之间的信息交换。
5.APPEND
格式:APPEND文件名[,Vv][,Ss][,Dd]
功能:类似于命令OPEN,但它不是将读写头置于文件首,而是置于文件尾。其后的WRITE会将PRINT的输出写至原文件之后,以增加文件的内容。
6.POSITION
格式:POSITION文件名[,Rr]
功能:R选项应在大写R之后跟一个非负整数(r)。本命令的作用是使指定文件的内部读写指针向后移动r个记录位置,即从当前位置开始向后跳过r个<CR>。 R选项省缺时,相当于用R0,文件内部读写指针不改动位置。
POSITION命令必须放在OPEN命令之后、WRITE或READ命令之前。
三、程序实例
程序1:
10 D$=CHR$(4): REM CHR$(4)=CTRL-D
20 PRINT D$;“OPEN A1”
30 PRINT D$;“WRITE A1”
40 PRINT “ABC”
50 PRINT “123”
60 PRINT 456.7
70 PRINT D$;“CLOSE A1”
80 END
此程序运行后,磁盘上将建立一个名字为A1的T型文件,其中存入了3个记录:字符串ABC、123和数字456.7。
程序2:
10 A$=A1
20 PRINT CHR$(4);“OPEN”;A$
30 PRINT CHR$(4);“READ”;A$
40 FOR I=1 TO2
50 INPUT B$(I)
60 NEXT I
70 INPUT C
80 PRINT CHR$(4);“CLOSE”
90 END
这个程序运行后,将从磁盘上的文件A1中读出3个数据分别赋值给变量B$(1)、B$(2)和C。参照程序1可知,这3个数据的值依次为字符串ABC、123和数字456.7。
§6.自动APPLE:EXEC命令
命令格式:EXEC文件名[,Rr][,Vv][,Ss][,Dd]
功能:EXEC命令同RUN命令很相似,均用来运行一个指定的磁盘文件。但RUN运行的是BASIC程序,而EX-EC运行的是含有命令(包括DOS命令)或BASIC程序的顺序文本文件。当用EXEC运行一个文件时,文件中的记录被顺序读入(象键盘上敲入一样),遇到立即执行命令,就马上执行它;遇带行号的BASIC程序,就进入程序区。这个顺序文本文件全部读完后,其中所有的命令也就顺序执行结束,从而成为一个自动APPLE机。
请看一例。设有如下程序:
10 PRINT “*TIEMS*”
20 PRINT “APPLE:”;TAB(10);1.2
30 PRINT “PEAR:”;TAB(10);1.1
40 PRINT “ORANGE:”;TAB(10);1.5
50 END
程序运行后会输出3种水果的价格。我们先以FRUIT为文件名经由SAVE存入磁盘。
如若打算先后做3件事:
1.运行FRUIT程序;
2.列示内存当前程序的20~40行;
3.列示当前磁盘的文件目录。
这时可建立一个文本文件,假定文件名用IT,可运行下列程序:
10 D$=CHR$(4):AS=“IT”
20 PRINT D$;“OPEN”;A$
30 PRINT D$;“WRITE”;A$
40 PRINI“RUN FRUIT”
50 PRINT“LIST 20,40”
60 PRINT“CATALOG”
70 PRINT D$;“CLOSE”;A$
80 END
这个程序运行后,在磁盘将建立一个名为IT的顺序文本文件,它有3个记录,依次为RUN FRUIT,LIST 20,40和CATALOG。
这时执行命令
EXEC IT
将会完成上面提到的3件事:运行磁盘上的FRUIT程序,以显示三种水果的价格;列示程序的20~40行和列示当前磁盘的目录。
作为EXEC的典型应用,我们再举一个例子。
设定内存中有一个BASIC程序,我们对其中的100~1000行很感兴趣,通过下面一段程序的运行,可以把它收入一个顺序文本文件中去保存起来(设该文件名为LISTING):
1. PRINT CHR$(4);“OPEN LISTING”
2. PRINT CHR$(4);“WRITE LISTING”
3. LIST 100,1000
4. PRINT CHR$;“CLOSE LISTING”
5. END
这个程序运行后,会把内存中的100~1000行程序段收入文本文件LISTING中。上一段程序中WRITE之后虽无PRINT输出,但LIST命令本身具有PRINT的输出功能。
通过上述方法,可以在LISTING中收入更多的很有用的程序段(不论它们来自浮点BASIC程序,或是来自整数BASIC程序)。
当再执行EXEC LISTING命令时,这些程序段会从磁盘上装入内存中,好象从键盘上敲入一样。更有趣的是,你在浮点BASIC状态下执行上述EXEC命令时,这些程序是浮点BASIC程序;当你在整数BASIC状态下运行上述EXEC命令时,这些程序又变成了整数BASIC程序。可见,在这种应用中,EXEC可以改变BASIC程序的语言属性。
§7.随机文本文件
随机文本文件与顺序文本文件类似。但一个随机文本文件的每个记录,都有相同的长度。因此随机文本文件中可能留有空白(填以零),它的好处是查找记录时比较方便。
一、随机文本文件命令
1.OPEN
格式:OPEN文件名,L1[,Vv][,Ss][,Dd]
功能:其中L项在大写字母L之后紧跟一个数字,指明随机文本文件每个记录的长度。
其余与顺序文件中的OPEN命令无异。
2.WRITE
格式;WRITE文件名[,Rr][,Bb]
功能:其中R项指明从文件的第几个记录开始写,B项指明从该记录的第几个字节开始写。R项省缺时相当于R0;B项省缺时相当于B0。其余见顺序文件中WRITE的说明。
3.READ
格式:READ文件名[,Rr][,Bb]
功能:R项与B项,同上面的说明;其余见顺序文件中READ命令的说明。
4.CLOSE
格式与功能,同顺序文件中的CLOSE。
二、程序实例
程序1:
10 FOR I=0 TO 10
20 INPUT A$(I)
30 NEXT
40 PRINT CHR$(4);“OPEN Q1,L100”
50 FOR I=0 TO 10
60 PRINT CHR$(4);“WRITE Q1,R”;I
70 PRINT A$(I)
80 NEXT I
90 PRINT CHR$(4);“CLOSE Q1”
100 END
运行此程序将建立一个名为Q1的随机文本文件,共11个记录,每个记录长度为100。因此要求运行时由20得到的键盘输入,每次不得多于100个字符。
程序2:
10 PRINT CHR$(4);“OPEN Q1,L100”
20 FOR I=0 TO 10
30 PRINT CHR$(4);“READ Q1,R”;I
40 INPUT A$(I)
50 NEXT I
60 PRINT CHR$(4);“CLOSE”
70 END
这是一个随机文件的检索程序。所得到数据与执行程序1时从键盘上输入的一样。
§8.DAVID-DOS与DOS 3.3的区别
一、DAVID-DOS比DOS3.3少一个INIT命令。
二、DAVID-DOS比DOS3.3增加了6个命令:
1.TLOAD
格式:TLOAD文件名[,Vv][,Ss][,Dd]
功能:将指定的文本文件从磁盘读入内存中。
2.TLIST 格式:TLIST
功能:列示由TLOAD读入内存的文本文件。
3.AL 格式:AL
功能:显示刚刚与磁盘交换的信息在内存中的首地址和长度。
4. DUMP 格式:DUMP [,Aa][,L1]
功能:从指定内存地址开始,按指定长度将各内存单元中的内容列示出来(显示十六进制数)。起始地址和长度均可用十进制数给出,也可用带$的十六进制数给出。省缺A选项时,从头(0号单元)列起;省缺L项时,长度无限。
5.DISA 格式:DISA[,Aa][,L1]
功能:以反汇编形式列示指定空间的内容。A选项、L选项意义同上。
6. HIDOS 格式: HIDOS
功能:将DAVID-DOS移入16K扩充RAM中,并重HIDOS命令执行后,DAVID-DOS中其它命令照样使用,唯HIDOS命令不能再用,而增加了一个新的命令:FIND。其功能是:执行后提示HEX:要求用户给出一个0~255之间的整数(也可用带$的十六进制数),接着将内存中所有存放为该数的内存地址,以十六进制数显示出来。(全文完)(张世英)