第 7 章 文 件.

Slides:



Advertisements
Similar presentations
编程加工 信息的. 趣味导入拓展提升大显身手总结反思学以致用 传说古代印度有个国王叫舍罕,他很迷恋棋类,而 宰相达依尔是个聪明的大臣,发明了国际象棋。国王玩 得爱不释手,决定奖赏宰相。达依尔说:陛下,我别无 他求,请你在这张棋盘的第一个格子里赏我 1 粒麦子; 在第二个格子里赏我 2 粒麦子;在第三个格子里赏我.
Advertisements

課程名稱:程式設計 授課老師:________
第四章 控制结构.
赋值语句与输入、输出语句.
程式語言(I)- Visual Basic 6.0 第 9 章 結構化程式設計
高中信息技术新课程探讨 算法与程序设计教学实践与探讨 江苏省新海高级中学  张丽.
上課囉 職場甘苦談 小資男孩向錢衝 育碁數位科技 呂宗益/副理.
网 络 课 程 马 鞍 学 网 络 山 课 程 大 络 网 Visual Basic程序设计 第 一 讲 最容易接受的编程语言
高等医药院校药学类第三轮规划教材——大学计算机基础
第五章 数组.
Visual Basic程序设计.
BLANK overview.
課程名稱:程式設計 授課老師:________
第6章 数 组 6.1 一维数组 6.2 控件数组 6.3 二维数组.
第10章 图 形 基 础 10.1 坐标系 10.2 绘图属性 10.3 图形控件 10.4 图形方法 习题十.
第二章 Visual Basic语言基础.
講師:戴志華 國立台灣大學電機工程研究所 Visual Basic 程式設計 講師:戴志華 國立台灣大學電機工程研究所.
第5章 数组 Visual Basic程序设计.
Visual Basic程序设计 第七章 数组
1、数组的概念 2、静态数组 3、动态数组 4、数组的基本操作 5、控件数组
Visual Basic 程序设计 第12章文件处理
程式語言 -Visual Basic 變數、常數與資料型態.
1 巨集 2 資料型態 3 物件、屬性、方法與事件 4 陳述式與副函式 5 其他注意事項 6 範例
初识Visual Basic.
算法与程序设计.
Visual Basic程序设计基础 计算机科学学院.
第十三章 檔案.
Access VBA程序设计 本章重点 Access Basic编程语言 运算符、函数与表达式 Access Basic语句 模块的使用
第4章 程序控制结构与算法基础.
新觀念的 VB6 教本 第七章 讓程式轉彎的控制敘述.
流程控制、陣列 台南市聖功女子高級中學 毛全良.
计算机程序设计强化复习 Visual Basic 6.0.
程式語言Visual Basic 重複結構 黃瀧輝 老師 Long Hwai,Huang.
程序的基本要素 2018/12/6.
Visual Basic 程序设计 教师:王 杨 电话:
3.5 用递归法解决问题 黄学鸿.
第12章 VBA模块设计.
丙級電腦軟設-VB程式設計 資料來源:林文恭研究室 整理:張福生.
新觀念的 VB6 教本 第 6 章 資料型別.
第5章 Visual Basic控制结构 之 常用算法举例
電腦解題─流程圖簡介 臺北市立大同高中 蔡志敏老師.
第 8 章 过程.
講師:戴志華 國立台灣大學電機工程研究所 Visual Basic 程式設計 講師:戴志華 國立台灣大學電機工程研究所.
广州市教育局教学研究室编写的 初中《信息技术》第二册第二章 《程序设计初步》
Visual Basic程序设计.
算法与程序设计 周少品.
VB程序设计语言 主讲教师:王 杨.
VB程序设计语言 主讲教师:王 杨.
第七章 文件 本章重点 7.1 文件管理控件 7.2 文件处理 7.3 练习.
程式設計 Visual Basic簡介 週次:2 建國技術學院 資管系 饒瑞佶 2003年9月17日.
程序设计基础 第 2 章 学习程序设计的基本方法: 多练 模仿.
VB程序设计语言 主讲教师:王 杨.
VB程序设计语言 主讲教师:王 杨.
程式語言(I)- Visual Basic 6.0 第 8 章 模組化程式設計I-副程式與自定函數.
For x = 0 To 9 For y = 0 To 9 z = *x + 10*y …… Next y
第 14 章 輸出與輸入.
江西财经大学信息管理学院 《数据库应用》课程组2007
VB语言程序设计教程.
小结 郭清溥.
经典算法之 冒 泡 排 序.
现代信息技术 微电子技术 计算机技术 传感技术 通信技术 处理、存储信息的技术 传感、采集技术 传递信息的技术
程序基础 2019/4/25.
第二章、第三章错题分析.
計算機概論 跨越講義 第4章 基本視窗程式應用 4-1 程式語言簡介 4-2 結構化VS物件導向程式設計
选择结构设计 第 4 章 程序流程有三种最基本的控制结构,即顺序结构、选择结构和循环结构。
1位选手参加了歌唱比赛,评委们的评分如下:
Print方法和函数 2019/5/19.
第5章 数组 5.1 数组概述 5.2 静态数组和动态数组 5.3 数组的基本操作 5.4 控件数组 5.5 数组在自定义数据类型中的应用.
計算機程式 Visual BASIC 程式設計
算法与Visual Basic程序基础(二)
Presentation transcript:

第 7 章 文 件

教学要求 掌握文件管理控件的主要属性、事件和方法★ 掌握文件的基本概念 掌握文件的常用函数、语句 掌握 顺序文件的读、写操作★ 了解随机(记录)文件 了解二进制文件 2

教学内容 7.1 文件管理控件 7.2 文件处理 7.3 顺序文件 7.4 随机文件处理 3

7.1 文件管理控件 驱动器列表框 DriveListBox 目录列表框 DirListBox 文件列表框 FileListBox 7.1 文件管理控件 VB 提供了驱动器列表框、目录列表框和文件列表框三个特殊的控件,将他们组合起来使用,可以创建与文件操作有关的界面。 驱动器列表框 DriveListBox 目录列表框 DirListBox 文件列表框 FileListBox 4

7.1.1 驱动器列表框(DriveListBox) [功能]: 一个下拉式列表框,显示当前系统的所有驱动器列表,顶端显示的是当前选定的驱动器。 [常用属性]: Name:名称属性,缺省时该属性值为Drive1; Drive:当前驱动器属性,该属性为运行态属性;可以用于返回在驱动器列表框中当前选取的驱动器号,也可用于指定在驱动器列表框顶端显示的驱动器; [常用事件]: Change:当用户在驱动器列表框中选择一个驱动器,或在列表框顶端输入一个驱动器标识,或通过赋值语句修改了驱动器列表框的Drive属性都会激活该事件。 一般在此事件中,用drive属性更新目录列表框的path属性,保持驱动器列表框和目录列表框的同步变化。 5

[常用语句]: 格式:ChDrive Drive 功能:改变当前工作驱动器—— 对文件进行存取操作时的缺省驱动器。 注意:该语句的执行与驱动器列表框无关,既不会改变列表框的drive属性,列表框顶端的显示,也不会引发驱动器列表框的Change事件。 同样,在驱动器列表框中选定某驱动器,并不能直接将其变更为当前工作驱动器,必须使用如下语句: ChDrive drive1.drive 6

7.1.2 目录列表框( DirListBox ) [功能]:显示系统当前驱动器的目录结构,并突出显示当前目录。显示从根目录开始,到当前目录这条路径上的所有目录,以及当前目录的下属所有第一级子目录。 -4 -3 -2 -1 1 [目录索引]: 当前突出显示的目录,索引值为-1,紧邻其上的目录为-2,再上一层为-3,依次类推;而当前工作目录的第一个子目录的索引值为0,其他子目录的索引值顺次递增。 7

Path:设置和返回目录列表框中的当前目录,为运行态属性;可以通过如下两种方式设置:一是赋值语句;二是双击目录列表框中某项。 [常用属性]: Name:名称属性,缺省时为Dir1; Path:设置和返回目录列表框中的当前目录,为运行态属性;可以通过如下两种方式设置:一是赋值语句;二是双击目录列表框中某项。 注意:一般目录列表框中显示当前驱动器上的目录,即目录列表框与驱动器列表框必须同步,必须使用如下语句: <目录列表框>.path=<驱动器列表框>.drive 此语句通常在驱动器列表框的Change 事件中执行。 例如: Private Sub Drive1_change() Dir1.path=Drive1.drive End Sub 8

Change: 当用户双击目录列表框中的目录项,或通过赋值语句改变了目录列表框的Path属性,都会引发该事件。 [常用事件] Change: 当用户双击目录列表框中的目录项,或通过赋值语句改变了目录列表框的Path属性,都会引发该事件。 一般在此事件中,用path属性更新文件列表框的path属性,保持文件列表框和目录列表框的同步变化。 [常用语句]: 格式:ChDir Path 功能:改变系统当前工作目录。 说明: (1) ChDir语句改变的是当前驱动器(或指定驱动器)的工作目录,而不能改变工作驱动器; (2)该语句与目录列表框无关,即不会改变目录列表框的当前目录,也不会触发Change事件。 同样,在目录列表框中选定某目录,并不能将其变更为当前工作目录,必须使用如下语句: ChDir dir1.Path 9

7.1.3 文件列表框( FileListBox ) [功能]:显示系统当前目录下的文件列表。 [常用属性]: Name:名称属性,缺省时为File1; Path:设置和返回文件列表中所显示文件的路径,为运行态属性 注意:一般文件列表框中显示当前目录之中的文件,即文件列表框与目录列表框必须同步,必须使用如下语句: <文件列表框>.path=<目录列表框>.path 此语句通常在目录列表框的Change 事件中执行。 例如: Private Sub dir1_change() file11.path=dir1.path End Sub 10

Pattern:文件种类,设置文件列表框显示文件的种类, 缺省为*.* 例: File1.Pattern=“*.txt ; *.frm” FileName:设置和返回文件列表框中将显示的文件名称,为运行态属性; 例: File1.fileName=“d:\*.frm” ListCount:返回文件(组合框、驱动器、目录)列表框中的所列项目的总数,为运行态属性; ListIndex:设置或返回当前控件上所选择项目的“索引值”,为运行态属性,列表框中的第一项为0,第二项为1,依次类推,若文件列表框中一项也没有选定,则返回-1; dir1.listindex = -2 drive1.listindex = 2 11

[常用事件] PathChange: Path属性改变时引发该事件; 注意:在程序中,给文件列表框的Filename属性赋值,也会自动改变它的Path属性,触发本事件。    file1.filename=“c:\config.sys” PatternChange: Pattern属性改变时引发该事件; Click:单击事件。 12

[文件属性]:——指定在文件列表框中显示某类属性的文件 ReadOnly:只读属性,缺省值True; Hidden:隐含属性,缺省值False ; System:系统属性,缺省值False; Archive: 存档属性,缺省值True ; Normal: 通常属性,缺省值True; 说明:当Normal属性为True 时,System 、Hidden 文件不显示;当Normal属性为False 时, 文件类型置为True的可显示。 file1.normal=false file1.system=true 13

7.1.4 组合使用文件管理控件 为使文件管理控件协调工作,关键点是使驱动器、目录、文件列表框同步,通过下述两个事件过程实现: 7.1.4 组合使用文件管理控件   为使文件管理控件协调工作,关键点是使驱动器、目录、文件列表框同步,通过下述两个事件过程实现: ——保证目录列表框与驱动器列表框同步更新。 ——保证文件列表框与目录列表框同步更新。 Private Sub drive1_change() dir1.path=drive1.drive End Sub 来看个例子吧[例7-2]。 Private Sub dir1_change() file11.path=dir1. path End Sub 14

Private Sub Drive1_Change() End Sub Private Sub Dir1_Change() 例:文件控件的组合使用。 Private Sub Drive1_Change() Dir1.Path = Drive1.Drive End Sub Private Sub Dir1_Change() File1.Path = Dir1.Path File1.Pattern = "*.wmf" Private Sub File1_Click() Dim name As String If Right(File1.Path, 1) <> "\" Then name = File1.Path & "\" & File1.FileName Else name = File1.Path & File1.FileName End If Picture1.Picture = LoadPicture( name ) Private Sub Drive1_Change() Dir1.Path = Drive1.Drive ChDrive Drive1.Drive End Sub Private Sub Dir1_Change() File1.Path = Dir1.Path File1.Pattern = "*.wmf" ChDir Dir1.Path Private Sub File1_Click() Picture1.Picture = LoadPicture(File1.filename)

7.2 文件处理 所谓文件,是一组相关信息的集合,是存放在磁盘上一系列相关的字节. 文件访问类型: 7.2 文件处理 文件: 所谓文件,是一组相关信息的集合,是存放在磁盘上一系列相关的字节. 文件访问类型: 顺序访问:从文件头开始,依次访问其中数据,适用于文本文件; 随机访问:适用于以记录形式保存的二进制文件,可以存取任意指定位置的记录; 二进制访问:适用于任意二进制文件 , 以字节为单位存取数据。 16

文件操作 文件操作的一般步骤: 首先将文件“打开”,即将相关信息加载进内存,建立文件与内存中某个文件缓冲区的关联; 文件“存/取”操作; 最后“关闭”文件,即释放文件所占用的文件缓冲区。 文件操作 17

7.2.2文件访问的语句和函数 P136 表7-2 18

对文件进行操作之前,必须用Open语句打开或建立一个文件 [功能]: 为文件的输入输出分配缓冲区,指定文件的存取类型(模式)和存取方式,定义与文件相关联的文件号。 [格式]: Open 文件名 [FOR 模式] [Access 存取类型] [锁定] AS [#]文件号 [Len=记录长度] [说明]: 格式中的Open、 FOR、 Access、AS、Len为关键字 文件名(Filename): 文件的名字,可用字符串或字符型变量表示。可以包括盘符和路径。 3) 模式(mode): 给出随机存取文件的记录长度。 19

说明访问文件的方式: OutPut 设定为顺序输出模式 InPut 设定为顺序输入模式 Append 设定为添加模式,与OutPut方式不同, 以Append方式打开顺序文件时,文件指 针定位在文件末尾,写入的数据添加到 原来文件的后面。 Random 设定为随机访问的模式 Binary 设定为二进制访问模式 如果缺省FOR子句,将以随机访问模式Random打开文件。 20

磁盘文件 磁盘文件 输出 数据 输入 数据 程序 写文件方式: Output Append 读文件方式: Input 21

取值范围在1~511范围之内。执行Open语句时,文件与分配给定的文件号相关联。 4) 存取类型(Access) 用来指定访问文件的类型。可以是: Read 对打开的文件只能进行读操作 Write 对打开的文件只能进行写操作 Read Write 对打开的文件可读可写 5) 文件号(Fileno) 取值范围在1~511范围之内。执行Open语句时,文件与分配给定的文件号相关联。 6) 记录长度(Reclength) 是一个整型表达式,其值≤32767。 对顺序文件,用该参数设定缓冲区的大小。 不指定,缓冲区的缺省值为512个字节。 4) 存取类型(Access) 用来指定访问文件的类型。可以是: Read 对打开的文件只能进行读操作 Write 对打开的文件只能进行写操作 Read Write 对打开的文件可读可写 注意: 如果打开的是顺序文件,在其FOR子句中(FOR Input 或FOR Input或FOR Append)指定了访问文件的模式,则不再需要Access子句。 若用Binary或Random模式打开文件时,不使用Access子句。Visual Basic将依次使用Read Write、Write和Read把文件打开3次。 22

注意: 1) 如果以Output、Append、Random和Binary模式打开一个不存在的文件,Visual Basic会创建一个相应的文件。 2) 在Input、Random和Binary模式下,可用不同的文件号打开同一个文件。但以Output和Append模式打开的文件在关闭之前不能用不同的文件号重复地打开它。 3) 所有当前使用的文件号必须是唯一的。即当前使用的文件号不能再分配给其他文件。 4) 如果以Output模式打开一个已存在的顺序文件,则该文件中原来数据将被覆盖。 23

举 例 P138 1) Open "Exam" FOR Output AS #5 举 例 P138 1) Open "Exam" FOR Output AS #5 如果文件“Exam”不存在,则建立一个新文件,可以将数据写入到文件中去。如果文件“Exam”已存在,则该语句打开已存在的文件,新写入的数据将覆盖原来的数据。 2) Open "Exam" FOR Append AS #5 如果文件“Exam”不存在,则建立一个新文件,否则打开已存在的名为“Exam”的文件,新写入的数据添加到文件的后面,原来的数据仍然存在。 3) Open "Exam" FOR Input AS #5 打开已存在的名为Exam的文件,可从中读出数据。如果文件“Exam”不存在将产生“File Not Found”错误。 24

2、关闭文件 [格式]:Close [[#]<文件号>] [功能]:关闭指定的文件号对应的文件。 释放相应缓冲区和与该文件相联系的文件号。 [说明]: (1)该语句适用于任何文件; (2)语句中可以包含多个文件号,文件号之间用逗号分隔 (3)若语句中缺省文件号参数,则关闭所有用Open语句打开的文件; (4)当应用程序结束时,会自动关闭所有文件。 例1:Close #1,#2 例2:Close 执行Close语句后,结束相应文件的输入输出操作,将文件缓冲区中的数据安全地保存到磁盘上的相应文件中去,释放相应缓冲区和与该文件相联系的文件号。该文件号又可以供其它Open语句使用。 25

[功能]:关闭所有用Open语句打开的文件。 [说明]:适用于任何文件。 3、关闭所有文件——Reset语句 [格式]:Reset [功能]:关闭所有用Open语句打开的文件。 [说明]:适用于任何文件。 例如:用Reset语句同时关闭三个已打开的文件——File1、File2和File3 Private Sub Filerest() Dim Fileno As Integer For Fileno = 1 To 3 Open "File" & Fileno For Output As Fileno Print #Fileno, Fileno Next Fileno Reset End Sub 26

4、锁定和解锁语句——Lock和Unlock语句 lock语句 [格式]:Lock <[#]文件号> [功能]:锁定指定文件号所对应的文件,不允许其他用户对该文件进行读写操作。 Unlock语句 [格式]:Unlock <[#]文件号> [功能]:解除锁定的文件。 27

相关函数和语句 P140 Eof(文件号) ★ 当文件指针到达文件结束标志时返回True,否则返回False。 FreeFile[(文件号范围)] ★ 返回Open语句可以使用的下一个有效文件号 LOF(文件号) ★ 返回已用Open语句打开的文件的字节数(文件长度) P140  Kill语句 [格式]:Kill <文件名> [功能]:从磁盘上删除指定文件 FreeFile [格式]:FreeFile([<范围数>]) [功能]:返回Open语句可使用的下一个有效文件号。 [说明]: (1)范围数为0或缺省时,文件号范围是1-511; 范围数为1时,文件号范围为256-511; (2)当Open语句占用了一个文件号之后,FreeFile才能获得一个新的文件号。 28

7.3 顺序文件 以顺序方式存取的文件称为顺序文件,一般是文本文件; 特性: 每行数据长度可以不同; 增加数据时,只能添加到原有数据的最后; 7.3 顺序文件 以顺序方式存取的文件称为顺序文件,一般是文本文件; 特性: 每行数据长度可以不同; 增加数据时,只能添加到原有数据的最后; 查找数据时,必须从头开始顺序查找。 适用: 每行数据长度不确定时; 数据不经常做新增、修改和删除操作时; 处理数据是依次连续处理。 29

7.3.1 顺序文件的写操作 1、打开文件 [格式]:Open <文件名> For <Output/Append> As [#] <文件号> [功能]:用指定的文件号以顺序输出模式或添加模式打开文件。 [说明]: (1)文件名可以是字符串,包含路径; (2)若指定的文件不存在,系统将创建一个相应的文件; (3)以Output方式打开文件,文件中原有的数据被覆盖; (4)以Append方式打开文件,写入的数据将添加到原文件的尾部 (5)文件号的使用必须是唯一的,即当前已经占用的文件号不能再分配给其他文件使用;文件号的使用范围是1-511; (6)一个文件在用Output和Append方式打开后,不能再重复打开 30

错误在哪里? 以相同的文件号打开 两个不同的文件 在文件未关闭前 又重复打开 例1:Open “D:\hb\Test.txt” For Output as #1 例2:Dim sFileName As String sFileName=“D:\hb\Test.txt” Open sFileName For Append As #100 例3:Open “File1” For OutPut As #9 Open “File2” For Output As #9 例4:Open “File1” For Append As #10     Open “File1” For Append As #11 以相同的文件号打开 两个不同的文件 在文件未关闭前 又重复打开 31

2、Print #语句 [格式]:Print <#文件号> ,[<输出列表>] [功能]:将输出列表中的语句写到顺序文件中。 [说明]:该语句和普通的Print语句的输出控制格式完全相同,也分紧凑和标准两种。 例1: Open “test.dat” for output as #10 print #10, 1 , 2 , 3 print #10,”We”,”study”,”VB6.0” Close 10 执行上述程序后,文件test.dat中的数据如下 2 3 We study VB6.0 32

Open “test.dat” for output as #10 Print #10 , 1;2;3 例2: Open “test.dat” for output as #10 Print #10 , 1;2;3 Print #10 , ”We”;”study”;”VB6.0” Close 10 执行上述程序后,文件test.dat中的数据如下: 1 2 3 WestudyVB6.0 提示: 为了避免以紧凑格式输出的各字符串难以明显区分,可以人为加上逗号间隔: 例如: print #10,”We”;”,” ; ”study”;”,”; ”VB6.0” 上述语句的执行结果为:We ,study ,VB6.0 33

Private Sub Command1_Click() Dim i As Integer, a(10) As Integer Open "d:\test.txt" For Output As #1 For i = 1 To 10 a(i) = Int(Rnd * 100) + 100 Print a(i); Print #1, a(i); Next i Print Print #1, Close #1 End Sub 34

3 Write语句 [格式]:Write <#文件号>,[<输出列表>] [功能]:将输出列表中的语句写到顺序文件中。 [说明]:Write语句和Print语句的功能基本相同,它们之间的差别主要在: (1)Write语句写入的数据按照紧凑格式存放,各数据项之间自动插入逗号作为分隔符; (2)Write语句写入的字符串数据自动加上双引号作为限界符。 例: OPEN “TEST.DAT” for output as # 12 Write #12 ,1 ,-2 ,3 ,”ABC” Write #12 Write #12, 5,6,7,”DEF”, Write #12 Close #12 上述程序执行后, TEST.DAT文件中的数据为: 1,-2,3,”ABC” 5,6,7,”DEF” 35

Private Sub Command2_Click() Dim i As Integer, a(10) As Integer Open "d:\test.txt" For Output As #1 For i = 1 To 10 a(i) = Int(Rnd * 100) + 100 Print a(i); Write #1, a(i), Next i Print Write #1, Close #1 End Sub 36

7.3.2 顺序文件的读操作 1、打开文件 [格式]:Open <文件名> For Input As <#文件号> 当一个文件存在时,可以对它进行读操作。读操作分为两种,一种是一个数据一个数据地读,另一种是一行数据一行数据地读。 1、打开文件 [格式]:Open <文件名> For Input As <#文件号> [功能]:用指定的文件号以顺序输入模式打开文件。 [说明]:以Input方式打开的文件,只能进行读操作。 37

2、Input 语句 [格式]:Input <#文件号> [,变量表] [功能]:从一个打开的顺序文件中读取数据,并将它们赋值给相应的变量。 [说明]: (1)变量表可以包含简单变量和数组元素,变量之间用逗号间隔,变量类型必须与文件中的数据项的类型一致; (2)从顺序文件中读数据时,要从头开始,依次读出,若数据类型和变量类型不一致,则赋一个初值给对应的变量; (3)从顺序文件读数据时,忽略前导空格、回车符、换行符; (4)读取数值型数据时,以其后的第一个空格或逗号或回车换行符作为结束; (5)读取字符型数据时,以第一个不在双引号里的逗号或回车换行符作为结束; (6)逻辑型和日期型数据以#号作为起始符和结束符,要求大写; 38

Dim A As Integer,B AS Integer,C As Integer Dim St As String 举 例 Test.txt 中数据:34 45 78 789 Dim A As Integer,B AS Integer,C As Integer Dim St As String Input #2 ,A,B,C,St A=34,B=45,C=78,St=“789” 39

This is File Test.dat,-2365,4893,#True# 要求按下面的格式输出在窗体上: Private sub form_click() Dim x as integer,y a integer,logic as boolean Dim filenumber as integer,chr as string Filenumber=freefile Open “Test.dat” for input as #filenumber Input #filenumber.chr Input #filenumber,x,y,logic Print char Print x,y,logic End sub 程序代码如左 40

3、Line Input语句 [格式]:Line Input <#文件号>,<变量名> [功能]:将顺序文件以行为单位读出并赋值给一个变量。 [说明]: (1)变量为字符型变量,或字符型数组元素,或变体型变量; (2)将数据行中除回车符和换行符以外的所有字符都赋值给相应的变量。 41

例:将c盘根目录下的config.sys文件的内容 显示在文本框中. Private Sub Form_Click() Dim line as String,filenumber as integer,str as string filename=freefile Open “c:\config.sys” For Input As #filenumber Do While Not EOF(filenumber) Line Input #1, line str=str+line+chr(13)+chr(10) Loop Close #filenumber text1.text=str End Sub 42

4、 Input函数 [格式]:Input(<字符个数>,<#文件号>) [功能]:从指定的文件中读取指定个数的字符(含空格 及各类符号)。 例:s=Input(10,#2) 43

顺序文件的修改与删除 (1)数据只能从头依次读出; (2)写文件时要么覆盖原来的文件,要么添加在文件的最后 顺序文件的特点是: (1)数据只能从头依次读出; (2)写文件时要么覆盖原来的文件,要么添加在文件的最后 这两个特点给顺序文件的修改与删除带来了困难。 [解决方案(以修改为例)]: (1)读取数据; (2)判断是否要修改?不修改,则将数据原封不动地添加到一个临时文件中; (3)要修改,则将新数据添加到该临时文件中; (4)重复1-3步直到文件结束; (5)删除原始文件; (6)将临时文件重新命名为原始文件的名字。 44

顺序文件的应用 读取原始数据: 顺序文件的应用体现在两方面:(1)从文件中读取原始数据并提供给程序处理:(2)将程序处理结果存放到文件中。 例:数据文件Test1.Txt有10个同学的成绩,格式如下: 学号,英语成绩,数学成绩,计算机成绩,化学成绩 要求:统计每个学生的不及格门数,并将不及格门数超过1门(>1)的学生学号和不及格门数写入到文件Test2.Txt中。 [程序]: 读取原始数据: Dim a(10, 5) As Integer Open "d:test1.txt" For Input As #1 For i = 1 To 10 For j = 1 To 5 Input #1, a(i, j) Next j Next i 45

Open "d:\test2.txt" For Output As #2 For i = 1 To 10 s = 0 统计不及格门数并写入目标文件 Open "d:\test2.txt" For Output As #2 For i = 1 To 10 s = 0 For j = 2 To 5 If a(i, j) < 60 Then s = s + 1 Next j If s > 1 Then Write #2, a(i, 1), s Print a(i, 1), s End If Next I Close 46

7.4 随机文件处理 以随机方式存取的文件称为随机文件,也称记录文件,由一组长度相等的记录组成,一般用于数据库文件,具有以下几个特点: 7.4 随机文件处理 以随机方式存取的文件称为随机文件,也称记录文件,由一组长度相等的记录组成,一般用于数据库文件,具有以下几个特点: (1)记录定长; (2)若记录为单字段,则可对应与任何一个VB的标准类型;若记录为多字段,则必须由用户进行自定义; (3)随机文件的访问,可根据记录号随机访问任何一个记录。 47

7.4.2 随机文件的打开 [格式]: Open <文件名> [For Random] As [#]<文件号> Len=<记录长度> [功能]:打开一个随机文件。 [说明]: (1)Random为文件的缺省访问模式,可省略; (2)Len为指定的记录长度,不能比实际写入的数据短,否则会出错 48

7.4.1 变量声明 在处理随机文件之前,必须先声明处理文件数据的变量; 1、定义记录类型 如果需要打开或创建的随机文件的记录是多字段的,必须在模块中预先自定义一个类型。 [格式]:Type <类型名> <字段名1> As <数据类型> <字段名2> As <数据类型>    <字段名n> As <数据类型> End Type [说明]: (1)数据类型为VB的标准数据类型; (2)若字段为字符型,则通常定义为定长字符串; (3)类型名和变量名的命名规则相同。 49

在具体进行随机文件的读写操作时,还必须以定义的类型声明一些变量。 例:Type Student_Score Name As String*8 Student_Id As String*7 English As Integer Math As Integer Computer As Integer End Type 2、声明变量 在具体进行随机文件的读写操作时,还必须以定义的类型声明一些变量。 例:Dim Stu_Score1 As Student_Score 50

7.4.3 随机文件的写操作 [格式]:Put #<文件号> ,[<记录号>],变量 [功能]:将变量的值写入到随机文件中。 [说明]: (1)记录号可省略,省略时将数据写入到当前文件指针处; (2)执行过一次Put操作,文件指针自动下移一个记录。 51

Type aa name As String * 8 Money As Integer End Type 窗体模块(通用)中 Private Sub Command1_Click() Dim nFileNum As Integer Dim RecLen As Integer, i As Integer RecLen = Len(Person) Open "d:\t3.txt" For Random As #1 Len = RecLen For i = 1 To 3 Person.name = InputBox("输入姓名") Person.Money = InputBox("输入工资") Put #1, , Person Next i Person.name = "China" Person.Money = 1000 Seek #1, 3 Close #1 End Sub 窗体模块(通用)中 Dim Person As aa 记录号 指定 记录号 52

7.4.4 随机文件的读操作 [格式]:Get #<文件号>,[记录号],变量 [功能]:从随机文件中读取数据,并赋值给相应的变量。 [说明]: (1)若不指定记录号,则读取当前文件指针所指的记录; (2)执行一次Get操作,文件指针自动下移一个记录。 Private Sub Command2_Click() Dim nFileNum As Integer Dim RecLen As Integer, i As Integer nFileNum = FreeFile RecLen = Len(Person) Open "d:\t3.txt" For Random As #nFileNum Len = RecLen Do While Not EOF(nFileNum) Get #nFileNum, , Person Print Person. Name, Print Person. Money Loop Close # nFileNum End Sub 53

7.5 二进制文件 以二进制方式存取的文件称为二进制文件,可以是任何类型的文件,存取方式和随机文件相同,二进制访问模式可以定位到文件中的任意一个字节的位置,读取的字节长度取决于语句中“变量”的长度。 1、打开文件 [格式]:Open <文件名> For Binary As [#]<文件号> [功能]:以二进制访问模式打开文件。 2、读写操作 语句格式和随机文件相同,系统在实现上有所不同。 54