首页 QBASIC文件操作

QBASIC文件操作

举报
开通vip

QBASIC文件操作QBASIC文件操作 QB的文件操作 学习重点: 1、了解文件的概念和分类。 2、掌握文件的打开、关闭以及读文件、写文件的方法,并能熟练运用。 3、会创建数据文件测试程序的正确性。 一、文件的概念 文件(file)也叫作文档,是存放在磁盘(包括硬盘、软盘、U盘、光盘)上的一批数据,每个文件必须有一个文件全名,用文件全名来指明文件。文件全名包括盘符、若干级目录、文件名、文件类型。 例如: d:\mydir\basic\data.txt 这里,盘符= d:,而且有三级目录,每个斜线引出一级目录,文件名=...

QBASIC文件操作
QBASIC文件操作 QB的文件操作 学习重点: 1、了解文件的概念和分类。 2、掌握文件的打开、关闭以及读文件、写文件的 方法 快递客服问题件处理详细方法山木方法pdf计算方法pdf华与华方法下载八字理论方法下载 ,并能熟练运用。 3、会创建数据文件测试程序的正确性。 一、文件的概念 文件(file)也叫作文档,是存放在磁盘(包括硬盘、软盘、U盘、光盘)上的一批数据,每个文件必须有一个文件全名,用文件全名来指明文件。文件全名包括盘符、若干级目录、文件名、文件类型。 例如: d:\mydir\basic\data.txt 这里,盘符= d:,而且有三级目录,每个斜线引出一级目录,文件名= data ,每级目录和文件名都不得超8个字符,文件类型=.txt,这是最常见的正文文件类型。 以下的文件名均合法: C:\a1.bas 代表C盘根目录下的a1.bas文件。 C:\qb\xue.dat 代表C盘中qb子目录中的xue.dat文件。 A:student.dat 代表A盘中当前目录中的student.dat文件。 abc.bas 代表当前盘、当前目录中的abc.bas文件。 我们知道,计算机的内存容量小,造价高,而且还有一个严重的缺点——易失性,就是说一旦关闭了电源,内存中的全部内容就统统丢失了。为此人们引进了磁盘文件作为内存的补充。 那么文件有什么用途呢,举例说吧,假如你是班级学习委员,编了一个记分的程序。第一天你输入了10个同学的各科成绩,然后你就关机睡觉了。第二天打开机器,你的数据就不翼而飞了,还得从头再来。如果你会使用文件,那就好办了。第一天你键入了一些数据,关机前把它们记入文件,即使关机了文件中的数据也不会丢失,第二天只要让QB打开文件并把其中数据读入到内存,就可以继续输入了。 还有一种情况应该使用文件。如果一个程序需要读取许多数据,若是每次都从键盘敲入,那么既麻烦又容易出错。我们可以把数据做成一个文件,并且让程序读取其中的数据。这样一来程序可能具有更大的灵活性。 按照文件中数据的表现形式来分类,可以将文件分成正文文件和二进制文件。正文文件也叫做ASCII文件,其中的数据都是由ASCII代码构成的,例如我们在QB 下编写的BASIC语言源文件(类型为.BAS)。正文文件是人制作的,或者是为人而制作的,是人所能看懂的文件,可以用DOS下的EDIT程序和WINDOWS下的记事本或写字板制作和阅读。二进制文件是由许多二进制位构成的,由一个程序制作,由另一个程序阅读,人看不懂,如果用EDIT、记事本或写字板来阅读的话,会出现 之下由源文件转换成的可执行文件(类型为.EXE),就是一一片乱码。例如在QB 种二进制文件。 相比之下,正文文件用处更大,足以应付通常的编程工作。我们只介绍正文文件的有关操作,想了解二进制文件可以参看各种QB的教科书。 从计算机内存向外存传送数据,称为“写文件”,即向外存输出数据。将外存文件中的数据向计算机内存传送,称为“读文件”,即将文件读入内存。 在QB中,文件是可读的,也是可写的,但是不能对同一个文件又读又写。 在程序中若想读、写文件数据,须经历三大步骤:打开文件、读/写数据、关闭文件。打开文件完成准备工作,关闭文件完成扫尾工作,而读/写数据完成的才是数据交换工作。 二、打开文件——OPEN语句 1、格式 打开文件要完成一些必要的准备工作,如在目录中找出要读的文件,创建要写的文件,放置文件指针。打开文件使用OPEN语句,其格式为: OPEN <文件名> FOR <读写方式> AS #<文件号> 其中:文件名可以是字符串常量或字符串变量,指明欲读写的文件。文件名通常采用文件全名,但是如果BASIC程序文件与它要读写的数据文件同在一个目录中,可以省略盘符和各级目录;如果程序文件与数据文件分别存放在同一个磁盘的不同目录中,可以省略盘符。 AS #后的文件号是1-255之间的任意一个整数,OPEN语句将它同文件名字等同起来,在后面的读写语句和关闭语句中只用文件号来指明文件。 读写方式指明了对文件的读写操作可以取以下三种之一: ? INPUT: 读文件,将文件中的数据传送到内存变量。例如: OPEN “d:\data\data1.txt” FOR INPUT AS #1 表示打开d:\data中的data1.txt文件,只能从文件读数据,以文件号1代表此文件。在OPEN语句中指定的文件名必须确实已经存在于指定的位置,如果d:\data中没有data1.txt,则认为发生错误,停止程序执行,因为不能从一个不存在的文件中读取数据。打开文件时文件指针指向文件开头,执行读语句时从第一个记录开始顺序读取。 ? OUTPUT:写文件,将内存中的数据传送到文件。 例如: OPEN a$ FOR OUTPUT AS #2 假设已经执行了a$ =“e:\data\data2.txt”,则打开e:\data中的data2.txt的输出文件,只能向文件写数据,指定该文件的文件号为2。如果e:\data中没有data2.txt,系统以此文件名建立一个新文件;如果文件存在,不论原来是否有数据,打开后,文件指针指向文件开头,原有的数据全部消失,相当于建立一个新文件。以OUTPUT方式打开文件时应十分小心,不要误删除原来文件中有用的数据。 ? APPEND:扩充文件,将在文件后添加新的数据。 OPEN “data3.txt” FOR APPEND AS #3 表示打开QB系统文件所在目录中的data3.txt,首先在QB系统文件所在目录中寻找文件data3.txt,如果找到,把文件指针指向到文件末尾处;如没有找到,建立之,把文件指针指到文件开始处。 ,那么要打开的文件必须存在,否则出错。对于注意:如果打开方式是INPUT 另两种方式,文件不存在也不是错误,都将导致创建一个新文件,并使文件指针指向文件开始处。若以OUTPUT方式打开的文件已经存在,则清除原有数据,并使文件指针指向文件开始处,因此以OUTPUT方式打开文件时应十分小心,不要误删除原来文件中有用的数据;若以APPEND方式打开的文件已经存在,则文件指针将指向文件末尾,意味着新数据都写在文件原有数据之后。 对一个文件以某种方式打开,则只能对其执行指定的操作,如用OUTPUT打开,就只能把数据从头到尾写到文件中,中间不能“读”,只有关闭后重新以INPUT打开才能读数据。 三、读文件——INPUT #语句、LINE INPUT #语句和EOF函数 所谓读文件就是从文件中取出字符串送入字符串变量,或者转换成数值送入数值变量。使用的语句有INPUT#语句和LINE INPUT#语句,它们分别对应于INPUT语句和LINE INPUT语句。 1、INPUT#语句 一般格式为: INPUT#<文件号>,<变量>[,<变量>] „„ 其作用是,从<文件号>所指明的文件中读数据,并把这些数据依次赋给各个指定的变量。一条INPUT#语句至少读入一个数据,变量分为字符串变量和数值变量,因此文件中数据的次序必须同这条语句中的变量次序一致。文件中的字符串数据可以用双引号界定,也可以用逗号或行尾作为结束,哪个先出现哪个起作用;用逗号或行尾结束的字符串不包含逗号和双引号,用双引号界定的字符串不包含双引号本身。而数值数据可以用逗号、空格或行尾作为结束。由于各变量对应的 文件中的数据都可以行尾作为结束,所以每一个数据都可以独占一行。在这一点,INPUT#同键盘输入语句INPUT显然不同,一个INPUT语句读取的多个数据必须同处一行。 2、LINE INPUT#语句 格式: LINE INPUT #<文件号>,<字符串变量> 作用是从打开的正文文件中读取一行,赋给指定的字符串变量。正文行上可以包含任何字符,如空格、逗号、双引号。 INPUT # 语句是从文件中逐一读取数据,而LINE INPUT # 语句一次就要读取文件中的一行数据。 3、EOF函数 格式:EOF(<文件号>) 此函数的作用是判断是否已经读完了<文件号>指明的文件中的所有数据,如是得到真值,否则得到假值。也就是说,测试文件是否结束,若结束,返回一个非0值。在程序中可以根据此值决定是否继续读此文件。 例 : OPEN "a.txt" FOR INPUT AS #1 ’打开文件a.txt准备读 DO WHILE NOT EOF(1) ’只要未到达文件尾,就继续读 INPUT #1, a$, b, c ’从文件中读出a$, b, c PRINT a$, b, c ’屏幕显示a$, b, c LOOP CLOSE #1 ’关闭文件a.txt,以便再次打开 PRINT ’屏幕空一行 OPEN "a.txt" FOR INPUT AS #1 ’再次打开a.txt准备读 DO WHILE NOT EOF(1) ’只要未到达文件尾,就继续读 LINE INPUT #1, a$ ’用LINE INPUT #语句读一整行 PRINT a$ ’显示该行 LOOP CLOSE #1 ’关闭1号文件 END 此程序首先打开文件 a.txt,并用INPUT#语句反复读取,每次读取3个数据到变量a$、b、c中,直至读完为止。文件中给出了INPUT#语句允许的各种数据格式。第二次打开文件,而后用LINE INPUT#来读取文件的每一行到a$中,再把它显示到屏幕上。 下面给出了本程序的屏幕输出,其中前4行是第一个循环4次读取的3个变量的内容。注意,如果显示的姓名中夹有逗号,在文件中这样的字符串只能放在双引 号中。后6行就是文件a.txt本来的样子。 Li ming 15 89.37 Li, ming 15 89.37 Li ming 15 89.37 Li ming 15 89.37 ---------------------------------------- Li ming, 15,89.37 "Li, ming"15 89.37 "Li ming",15,89.37 Li ming 15 89.37 四、写文件——PRINT #语句和WRITE #语句 1、PRINT #语句 格式:PRINT #<文件号>,[USING “<格式字符串>”];<输出项表> 文件号> 所关联的文件中。 功能:写数据到#< PRINT#语句的使用与屏幕输出语句PRINT相似,只不过前者把数据写入外存,后者把数据输出在屏幕上。其中的文件号是打开文件时指定的。输出项表由O个或多个表达式组成,它们的值将输出到文件中,如果为空,则在文件中输出一个空行。 在省略格式字符串的情况下,每个表达式后跟有一个逗号或分号,逗号表示采取紧凑格式——数值后留一个空格,分号在输出项之后将跳到下一个14倍数列。最后一个输出项后还可跟有空格,表示输出后换行。输出项可以包括函数TAB(n)和SPC(n),分别表示使输出位置跳到第n列和跳过n列。 如果使用了USING “<格式字符串>”,那么各输出项之间只能用分号隔开。<格式字符串>描写了各个输出项的输出格式,其中的格式字符串可以有一个或几个输出格式,每个输出格式对应于一个输出项。如果输出格式的个数少于输出项,则循环使用各输出格式。每个输出格式由若干格式字符组成,格式字符有数值的和字符串的。 数值格式字符包括: # 代表一个数值位,如#######表示显示7位整数(包括负数的-号),不足7位左 面补之以空格。 . 小数点,如####.###表示显示实数,其中整数部分占7个位置,而后是小数点, 最后是3位小数。 , 放在小数点之前,表示用逗号把整数部分分为3位一组。 + 符号,表示显示数值符号,对于正数显示+,负数显示-。 -放在输出格式的最后,表示把-号显示在负数数值之后。 ^^^^放在###...之后,表示要采取指数形式显示,^的个数指明指数占4个位置。 ** 放在###...之前,表示数前的空位用*填充。 $$前,表示数前显示一个$。 ###...之前,表示数前显示一个$,前空用*填充。 **$ 放在 字符串格式字符包括: & 显示整个字符串。 ! 显示字符串的第一个字符。 /n个空格/ 显示字符串的前n+2个字符。 _ 放在格式字符之前,则将此格式字符作为普通字符显示,_ _将显示一个_。 以上格式字符之外的其它字符,如果出现在格式字符串中,将被原样地显示在文件中。例如: a = 1234.567: b = -34.5678: c$ = "abcdefgh" OPEN "b.txt" FOR OUTPUT AS #1 PRINT #1, "1, "; a; b; c$; a PRINT #1, "2, "; TAB(20); a; SPC(5); b; c$; a PRINT #1, "3, "; a, b, c$, a WRITE #1, 4, a, b, c$, a PRINT #1, USING "5, #####.##|"; a; b PRINT #1, USING "6, ######^^^^|####.###^^^^^|"; a; b PRINT #1, USING "7, +#####.#|######.#-|"; a; b; b; a PRINT #1, USING "8, **#####,.#|$$#####.#|**$#####.#|"; a; a; a PRINT #1, USING "9, left$(c$,1)=!|c$=&|_!|_&|__|\ \|"; c$; c$; c$; CLOSE #1 END 此程序展示了PRINT#和WRITE#语句的用法,特别是格式字符串的作用,下面给出的是本程序所生成的文件b.txt的全部内容,请读者对照上面的程序仔细阅读。为便于对照,在每个 PRINT#语句中都显示一个序号,可是在第7个PRINT#语句中由于格式项的个数多于输出项,所以序号也同格式项一起被重复显示了。 1, 1234.567 -34.5678 abcdefgh 1234.567 2, 1234.567 -34.5678 abcdefgh 1234.567 3, 1234.567 -34.5678 abcdefgh 1234.567 4,1234.567,-34.5678,"abcdefgh",1234.567 5, 1234.57|5, -34.57| 6, 12346E-01|-345.678E-001| 7, +1234.6| 34.6-|7, -34.6| 1234.6 | 8, ***1,234.6| $1234.6|***$1234.6| 9, left$(c$,1)=a|c$=abcdefgh|!|&|_|abcd| 2、 WRITE #语句 格式:WRITE #<文件号>,<输出项表列> 用它写文件时能自动地在各数据项之间插入逗号,并给字符串加双引号,且不在正数前面设置空格。用WRITE#语句写成的文件更适合INPUT#语句读取。 例:比较下面两个程序产生的输出文件格式的不同 Open “ex.1”for output as #1 Open “ex.2”for output as #1 DO DO INPUT " NAME: ", Name$ INPUT " NAME: ", Name$ INPUT " AGE: ", Age INPUT " AGE: ", Age WRITE #1, Name$, Age print #1, Name$, Age INPUT "Add another entry"; R$ INPUT "Add another entry"; R$ LOOP WHILE UCASE$(R$) = "Y" LOOP WHILE UCASE$(R$) = "Y" CLOSE #1 CLOSE #1 当输入数据同样为:NAME: ccc AGE: 12 NAME: bbb AGE: 11 时,ex.1与ex.2两个文件的内容分别为: "ccc",12 ccc 12 "bbb",11 Bbb 11 3、PRINT和WRITE语句两者的不同点: PRINT写入到文件中的数据若是字符串,没有引号; 若PRINT有多个输出项,则项与项之间有空格。而WRITE语句若写入到文件中的数据是字符串,会自动添加引号;多个输出项之间会以“,”相隔。 五、关闭文件——CLOSE语句 格式:CLOSE,,<文件号>,,,#<文件号>,„„ 此语句可以有0个、一个或多个,<文件号>参数,将分别关闭所有的、一个或多个已打开的文件。 关闭文件完成必要的扫尾工作,包括修改目录以反映文件信息的改变,如文件的长度、修改日期。尽管当程序结束时QB能自动关闭尚未关闭的文件, 规范 编程规范下载gsp规范下载钢格栅规范下载警徽规范下载建设厅规范下载 的 做法仍然是让程序关闭自己打开的所有文件。 六、创建数据文件 创建数据文件用以测试程序的正确性 方法1:使用QB程序产生数据文件 方法2:直接用QB编辑好数据后存盘,扩展名可以自选。 方法3:使用写字板或其他编辑软件写入需要的数据,扩展名一般选“.txt”(常用方法) 例:有一个程序需要30个整数,范围1—100,每行3个数,共10行。我们可以 这样来建立符合条件的数据文件“A1.IN” Open “a1.in” for output as #1 For I=1 to 10 Input a,b,c ’如果需要的数据是随机的,我们完 Print #1,a,b,c 全可以用随机函数产生a,b,c Next I a=int(rnd*100)+1:b= int(rnd*100)+1:c= Close #1 int(rnd*100)+1} end 六、综合示例 下面给出几个综合性的例 快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题 :前几个代表了通常涉及文件的习题和试题,最后一个算得上是一个应用实例,功能强,但程序简单,容易修改成真正的应用。 例1(拐角矩阵 1 1 1 1 1 1 1 【问题描述】 2 2 2 2 2 2 1 3 3 3 3 3 2 1 从指定文件中读取正整数,m,n,i和j,(1<=i,j<= n 4 4 4 4 3 2 1 <=20),然后计算并显示n阶回形矩阵的第i行第j列元素的5 5 5 4 3 2 1 值(右图给出的是7阶回形矩阵)。 6 6 5 4 3 2 1 [输入输出] 7 6 5 4 3 2 1 文件输入:(输入文件\L1\T1.DAT与QB系统文件处在同 一磁盘上) 该文件的第一行为正整数m , 表示下面有m组数据,每组数据均占一行。 每行均有三个正整数n,i和j(以空格分隔)。表示要计算并显示n阶回形矩阵的第i行第j列的元素值。 输入文件样例: 3 7 2 3 7 5 4 7 7 1 屏幕输出: 共有m行,每行只有一个正整数,即根据对应的输入数据计算出的元素值。 对应上面的输入产生如下屏幕输出: 2 4 7 【问题 分析 定性数据统计分析pdf销售业绩分析模板建筑结构震害分析销售进度分析表京东商城竞争战略分析 】 观察此题中的拐角矩阵,会发现它呈现明显的规律:在从对角线之上显示的 是行号i,在其下方显示的是n+1-j。程序要先打开文件,从文件中读取数据组数 m。而后在一个执行m次的循环结构中,先读取矩阵尺寸n、行号i和列号j,然 后算出位于第i行第j列的元素值k,并显示之。 【程序清单】 REM 2-1.BAS OPEN "\L1\T1.DAT" FOR INPUT AS #1 INPUT #1, m FOR I = 1 TO m INPUT #1, n, i, j IF i + j <= n + 1 THEN k = i ELSE k = n + 1–j ’判断元素值 PRINT k NEXT I CLOSE #1 END 例2.整数的拼接(2006年小学程序 设计 领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计 竞赛第4题) 【问题描述】 设有n个整数(3?n?10),将这些整数拼接起来,可以形成一个最大的整数。 例如 n=3, 三个整数分别为21, 7, 34, 拼接后最大的整数为: 73421 [输入输出] 文件输入: 第一行一个整数n ,表示有n 个整数 第二行n个整数,数与数之间用一个逗号分隔。 (10个测试文件在“d:\js\t2”目录中,文件名为:JS41.IN,JS40.IN) 文件输出:一个拼接后的最大的整数。 (10个输出文件在“d:\js\t2”目录中,文件名为:JS41.OUT,JS40.OUT) 【样 例】 输入 输出 3 73421 21,7,34 【问题分析】 题目明确写明输入文件和输出文件的具体目录和文件名,为了节约时间,我 们采取常量+变量的方法,只从键盘输入文件名,而不输入目录和文件类型。 【程序清单】 REM 2-2.BAS INPUT A$ ’分别输入文件名JS41--JS40 B$="D:\JS\T2\"+A$+".OUT" ’产生具体的输出文件名 A$="D:\JS\T2\"+A$+".IN" ’产生具体的输入文件名 OPEN A$ FOR INPUT AS #1 OPEN B$ FOR OUTPUT AS#2 INPUT #1, N ’从文件中读入整数N DIM A$(N) FOR I = 1 TO N INPUT #1, A$(I) NEXT I FOR I = 1 TO N – 1 ’拼接 FOR J = I + 1 TO N IF A$(I) + A$(J) < A$(J) + A$(I) THEN SWAP A$(I), A$(J) NEXT J NEXT I FOR I = 1 TO N PRINT #2,A$(I); NEXT I CLOSE END 练一练: 将此题改为10个测试文件的文件输出内容均在d:\js\t2\JS2-2.OUT文件中。 (提示:用扩充文件方式) 例3.蛇形矩阵(2004年小学信息学奥赛复赛第1题) 【问题描述】 8 6 5 7 6 2 1 9 7 7 4 8 5 3 从键盘输入正整数n,i和j ,(1<=i,j<= n <=20), 9 0 6 8 3 9 4 然后计算并显示n阶蛇形矩阵的第i行第j列元素的值 (右0 8 1 5 9 2 0 图是7阶蛇形矩阵)。 6 1 7 2 4 0 1 [输入输出] 7 5 2 6 3 3 1 9 8 4 3 5 4 2 文件输入:第一行一个整数K ,表示有K组数据;其 余每行3个整数N,I,J,表示要计算并显示n阶蛇形矩阵的 第i行第j列的元素值,数与数之间用空格分隔。 (测试文件在“d:\js\t3”目录中,文件名为:L3.TXT) 文件输出: 输出到文件(L3.OUT),输出文件和测试文件在同一个目录。每行只有一个正整数,即根据对应的输入数据计算出的元素值。 【样 例】: 输入 输出 5 3 7 3 5 4 7 4 4 4 9 5 6 4 15 9 12 8 20 11 8 【问题分析】 题目明确写明测试文件的具体目录和文件名,可以直接在OPEN后面用具体 的字符串常量来指明文件全名。由于输出文件和测试文件在同一个目录中,因此 可以省略具体的路径,只指明文件名。 【程序清单】 REM 2-3.BAS OPEN "D:\JS\T3\L3.txt" FOR INPUT AS #1 OPEN “L3.OUT” FOR OUTPUT AS #2 INPUT #1, k FOR l = 1 TO k INPUT #1, n, i, j m = i IF m > j THEN m = j IF m > n + 1 - i THEN m = n + 1 - i IF m > n + 1 - j THEN m = n + 1 - j PRINT #2,m ’将数据写入到2号文件中 NEXT I CLOSE END 例4(找最长单词 (2004年小学信息学奥赛复赛第2题,有改动) 【问题描述】 编写程序,根据给出的若干行结束于’.’的字符字串,找出每行最长的含有字母’a’的子串。 【输 入】 输入文件名统一规定为L4.DAT。 该文件有若干行,每行均有一组数据,每组数据均为一个字符字串,结束于句点’.’。字串中的子串由一个或几个空格隔开。 【输 出】 输出到文件(L4.OUT).共有若干行。每行均只有一个数据,显示找出的最长的含有字母’a’的子串。如果有多个这样的子串,只显示其中的第一个;若没有含字母’a’的子串,则显示“NO”。 【样 例】 输入文件L4.DAT: She is working. Her name is linan and she is a happy student. Algorithms are central objects of study in many areas of the field. The sharing of programs in computer systems is becoming more widespread. x yy zza 12345 12a45 ww wwwa 123a5 78900. x yy zzz uuuu vvvvv a bb ccc. 输出文件L4.OUT: NO linan central widespread 12a45 a 【问题分析】 题目没有指明有多少个测试数据,因此只能用EOF函数判断是否已经读完了< 文件号>指明的文件中的所有数据。 【程序清单】 REM 2-4.BAS OPEN "L4.DAT" FOR INPUT AS #1 ’打开文件准备读 OPEN "L4.OUT" FOR OUTPUT AS #2 ’打开文件准备写 DO WHILE NOT EOF(1) ’只要未到达文件尾,就继续读 LINE INPUT #1, a$ ’用LINE INPUT #语句读一整行 a$ = MID$(a$, 1, LEN(a$) - 1) ’ 取出每行末尾的’.’ l = LEN(a$): ml = 0: mx = -1: w = 0: a = 0 FOR i = 1 TO l c$ = MID$(a$, i, 1) IF (w = 0) AND (c$ <> " ") THEN cl = 1: cx = i: w = 1 IF c$ = "a" THEN a = 1 ELSEIF (w = 1) AND (c$ <> " ") THEN cl = cl + 1 IF c$ = "a" THEN a = 1 ELSEIF (w = 1) AND (c$ = " ") THEN IF (cl > ml) AND (a = 1) THEN ml = cl: mx = cx w = 0: a = 0 END IF NEXT i IF (cl > ml) AND (a = 1) THEN ml = cl: mx = cx IF mx > 0 THEN FOR i = 1 TO ml PRINT #2, MID$(a$, mx - 1 + i, 1); NEXT i PRINT #2, ’文件空一行 ELSE PRINT #2, "NO" END IF LOOP CLOSE END 例5(建立、添加、读取学生的成绩信息文件 下面的程序是一个学生成绩管理程序,功能很强,可以建立文件、写入数据、读取数据、加工数据,稍加扩充可以成为一个完备的信息管理系统。它首先读取从键盘输入的班级名字,如五年三班输入为5-3,而后构成文件名\school\5-3.txt,这意味着各班的成绩文件都放在同一目录之下。如果此文件不存在则建立之,并接纳学生的资料;如果存在则将新资料加在原有资料之后。接下来,读出文件中的全部数据,把它们显示在屏幕上,并算出各科的平均成绩。下面给出全部源程序: 源程序T5.BAS: INPUT "class : ", class$ 输入班级号 class$ = "\school\" + class$ + ".txt" 构成该班的文件名 OPEN class$ FOR APPEND AS #1 打开文件准备扩充 INPUT "name : ", name$ 读第一个学生的姓名 WHILE name$ <> "" 如姓名为空,结束循环 INPUT eng, bas, math 输入学生的三科成绩 WRITE #1, name$, eng, bas, math 将该生的姓名和成绩写入文件 INPUT "name : ", name$ 读下一个学生的姓名 WEND CLOSE #1 关闭文件,以便再次打开 OPEN class$ FOR INPUT AS #1 再次打开准备读 WHILE NOT EOF(1) 如果没有到达文件尾,循环 n = n + 1 学生人数n加1 INPUT #1, name$, eng, bas, mat 读第n个学生的资料 PRINT name$, eng, bas, mat 累加各科成绩 engav = engav + eng basav = basav + bas matav = matav + mat WEND CLOSE 关闭文件 engav = engav / n 计算3科平均分 basav = basav / n matav = matav / n PRINT "english average = "; USING "##.##"; engav 显示3科平均分 PRINT "basic average = "; USING "##.##"; basav PRINT "mathematics average = "; USING "##.##"; matav END 程序结束 此程序能够为所有班级服务,而且对同一个班级可以多次添加数据。下面的 会话过程表明,五年三班的文件还不存在,于是本程序建立之,并将键盘输入的 两个学生的数据记入文件,在键入姓名时如果只按Enter,即输入了空串,表示结 束输入。而后读出文件中所有学生(当前只有两个学生)的数据,同时算出三科 的平均成绩。 class : 5-3 name : li ming english,basic,mathematics : 64,69,72 name : wang hong english,basic,mathematics : 78,69,82 name : li ming 64 69 72 wang hong 78 69 82 English average = 71.00 basic average = 69.00 mathematics average = 77.00 下面的会话是第二次为五年三班输入数据,这次又增加了两个同学的数据,然 同学的数据,最后给出三科的平均成绩。 后显示全部4个 class : 5-3 name : lin nan english,basic,mathematics : 92,88,93 name : zheng haiyang english,basic,mathematics : 62,59,45 name : li ming 64 69 72 wang hong 78 69 82 lin nan 92 88 93 zheng haiyang 62 59 45 english average = 74.00 basic average = 71.25 mathematics average = 73.00 在教学过程中,要让学生多练习,熟练掌握读入文件、输出文件的方法。同时要指导学生创建数据文件,以测试程序的正确性。 本讲作业: 1、文件中有若干个数,将其中重复的数删得只剩下一个。 文件输入:文件名为:2_1.in,格式为:每行有一个数,有若干行。 文件输出:文件名为:2_1.out,在一行显示。 2、求M,N的最小公倍数(输出到屏幕)。 文件输入:文件名为:2_21.in~2_20. in,格式为:M,N(每个文件只有1行) 文件输出:文件名为2_21.out~2_20. out。 3、求N个字符串(N<20,串长<255)中最长的公共子串。如最长的公共子串不止一个,只输出最先找到的那一个。 文件输入:文件名为:2_3.in,每行一个字符串,有若干行。 文件输出:文件名为:2_3.out。 4、M进制数与N进制数互相转换。(M、N均为10以内的整数) 文件输入:文件名为:2_41.in~2_40. in,格式为:M?N?X(具体的数) 文件输出:文件名为:2_4.out。 10个测试文件的文件输出内容均在输出文件中。
本文档为【QBASIC文件操作】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_105949
暂无简介~
格式:doc
大小:48KB
软件:Word
页数:22
分类:生活休闲
上传时间:2018-10-01
浏览量:58