|
第十章 文件 |
|||||||||||||||||
| 文件——程序或数据存放在磁盘上的形式,存放在外部介质上的数据的集合;
数据 ——文件 一、文件的概念 1、分类 (1)从文件的内容区分;
3、文件名
写文件——从计算机主机向磁盘传送(输出)数据。 对磁盘上的数据文件进行读写操作时,必须在内存中开辟一个“文件缓冲区”,以建立必要的输入/输出通道。
1、概念
2、顺序文件的打开与关闭 使用之前,先“打开”文件,使用后“关闭”它;
<读写方式>:
说明:
关闭由文件号指定的文件缓冲区,将内容存盘,如不指定文件号,则关闭所有已打开的文件; 3、输出数据(写文件)
例;PRINT #1,a;b;c 注意:逗号与分号的差别,与PRINT语句类似在对字符串存盘时,注意引入定界符。 存盘时,各数据间插入逗号,并给字串加双引号,且正数前面不设空格。 例: OPEN "student.dat" FOR OUTPUT AS #1
READ num,nam$,sex$,score DATA 101,Li,m,90,103,Wang,f,98 DATA 104,Xiu,f,100,105,Zhang,m,78 DATA 107,Tan,m,99,109,Ling,f,88 DATA 000,end,, END CHR$(13)、CHR$(10) (2)、文件最后用“文件结束符”结束CHR$(26) 一个记录的长度不能超过225个字符;
从已建立文件中读入数据到计算机中;
格式:INPUT #<文件号>,<变量1>[,<变量2>…..]
注意:变量类型应与数据一致; OPEN "student.dat" FOR OUTPUT AS #3
PRINT num,nam$,sex$,score CLOSE END
EOF(<文件号>)
OPEN "student.dat" FOR OUTPUT AS #3
PRINT stud$ CLOSE END
若要修改已有的顺序文件,则要利用中间文件,因为对一个顺序文件不能既读又写。对顺序文件的修改步骤: 例: OPEN "student.dat" FOR INPUT AS #1
PRINT num,nam$,sex$,score INPUT "chang?(y/n)";r$ if UCASE$(r$)="Y" THEN INPUT num,nam$,sex$,score WRITE #2,num,nam$,sex$,score INPUT "insert?(y/n)";q$ if UCASE$(q$)="Y" THEN
WRITE #2,num,nam$,sex$,score CLOSE KILL "student.dat" NAME "temp" AS "student.dat" END
按记录号进行存取,记录的顺序不一致,可直接读写任一条记录。 1、随机文件的建立 (1)OPEN <文件名> AS#<文件号> [LEN=<长度>] 存取方式不用指定,自动加上“FOR RANDOM”,表示随机文件; (2)定义缓冲区中各“域”的长度(FIELD
字段)
如:FIELD #1, 10 AS A$, 15AS B$, 36AS C$ (3)随机文件的记录中各域只能存放字符串数据,在对数值型数据进行处理时,要经过转换; MKI$(<整型表达式>) 2字节 MKS$(<单精度表达式>) 4字节 MKD$(<双精度表达式>) 8字节 称为“内码字符串” LSET <域变量>=<字符串>(左对齐) RSET <域变量>=<字符串>(右对齐) PUT #<文件号>[,<记录号>] OPEN "good.dat" FOR RANDOM AS #1 LEN=23
IF num%=9999 THEN EXIT DO LSET n$=MKI$(num%) LSET m$=nam$ LSET p$=MKS$(price) LSET s$=MKI$(stock%) PUT #1 DATA ............. DATA ............. DATA ............. DATA ............. DATA ............. DATA 9999,,, CLOSE END
OPEN <文件名> AS#<文件号> [LEN=<长度>] (2)、定义文件缓冲区中各域的长度; FIELD <文件名>,<域宽>AS<域名>[,<域宽>AS <或名>] (3)、从指定的文件中读取一个记录
CVS(<4个字节的域变量>)——单精度 CVD(<8个字节的域变量>)——双精度 这三个函数是MKI$,MKS$ MKD$的逆运算 CLOSE 例:
FIELD #1, 2 AS n$,15 AS m$,4 AS P$,2 AS s$ PRINT "num","name","price","stock" FOR i%=1 TO LOF(1)/23
nam$=m$ price=CVS(p$) stock%=CVI(s$) PRINT num%,nam$,price,stock% CLOSE END 3、随机文件的修改 随机文件的优点:可直接读写任何一个记录,且既能读又能写。
FIELD #1, 2 AS n$,15 AS m$,4 AS P$,2 AS s$ INPUT "which record:";r DO UNTIL r=0
nam$=m$ price=CVS(p$) stock%=CVI(s$) PRINT num%,nam$,price,stock% INPUT "price=";price LSET p$=MKS$(price) PUT #1,r INPUT "which record:";r CLOSE END 3、记录型变量 一个记录包括若干个“域”,在同一文件中各个记录所包含的域都是相同的,这样可以定义一种新的变量类型——记录。
格式:TYPE <记录类型名>
<域名2> AS <类型> ...... <域名n> AS <类型> num AS INTEGER nam AS STRING*15 price AS SINGLE stock AS INTEGER TYPE END 格式: DIM <记录变量名> AS <记录类型名> 例如: DIM a AS goods (3)、记录变量中的域表示法 格式: <记录变量名>.<域名> 例如: a.num 表示a变量中的num域。 4、用于记录变量的读写语句 (1)、GET#语句 (P346例12.14)
num AS INTEGER nam AS STRING*15 price AS SINGLE stock AS INTEGER TYPE END DIM cloth AS goods OPEN "good.dat" FOR RANDOM AS #1 LEN=LEN(cloth) DO READ cloth.num,cloth.nam,cloth.price,cloth.stock IF cloth.num=9999 THEN EXIT DO PUT #1,,cloth LOOP DATA ..... ..... DATA 9999,,, CLOSE END TYPE goods TYPE goods
FILES ["文件名"] 例:FILES "*.BAS" —显示当前目录下,扩展名为BAS的所有文件; 2、执行DOS命令 例:SHELL "dir" — 暂时退出QBASIC,执行DOS的命令dir(显示目录),然后返回QBASIC。 3、文件改名 4、文件删除 5、目录操作
|
|||||||||||||||||