文件题型分析1Word格式文档下载.docx
《文件题型分析1Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《文件题型分析1Word格式文档下载.docx(19页珍藏版)》请在冰豆网上搜索。
顺序文件中的数据是按顺序组织的文本行,每行(即一个记录)的长度可以变化,用“换行”字符作为分隔符号。
在顺序文件中,只知道第一个记录的存放位置,其他的记录无从知晓。
随机文件是由一组长度相等的记录组成的,一般它们以二进制形式存放,每个记录包含一个或多个字段。
可以根据文件中的记录号访问任何一条记录,无须按顺序进行。
二进制文件以二进制方式保存文件,以字节数来定位数据,没有固定的格式,允许程序按所需的任何方式组织和访问数据,对文件中的各个字节数据进行存取访问和改变。
(2000春30题)在VisualBasic中文件访问的类型有_30__。
A.顺序、随机、二进制
B.顺序、随机、字符
C.顺序、十六进制、随机
D.顺序、记录、字符
答案为A。
7.3文件的基本操作语句和函数
在VB中,文件的操作按下述步骤进行:
•打开(建立)文件:
一个文件必须打开或建立后才能使用。
文件打开后,都有相关的文件号,文件号是一个整数,文件在进行读写时都要指定文件号。
读(写)文件:
把内存中的数据传送到相关的外部设备并作为文件存放的操作叫写数据;
把文件中的数据传输到内存中的操作叫读数据。
关闭文件:
将数据写入磁盘,并释放相关的资源。
文件操作命令:
打开文件命令
•Open文件名[For模式][Access存取类型][锁定]As[#]文件号[Len=记录长度]
•文件名为一字符串。
•模式:
Output——顺序输出;
Input——顺序输入;
Append——添加模式;
Random——随机访问模式;
Binary——二进制访问模式
•存取类型:
如果打开的是顺序文件并且已指定了模式,则不需要用Access子句。
Read——读文件;
Write——写文件;
ReadWrite——可读可写
•文件号:
1~511的整数。
•在Input、Random和Binary模式下,可以用不同的文件号打开同一个文件,以Output打开的文件在关闭之前不能用不同的文件号重复地打开它。
当打开一个文件并为它指定一个文件号后,该文件号就代表该文件,直到文件被关闭后,此文件号才可以再被其他文件使用。
(2000秋28题)下面能够正确打开文件的一组语句是_28__。
A.Open"
data1"
ForOutputAs#5,Open"
ForInputAs#5
B.Open"
ForInputAs#6
C.Open"
ForInputAs#5,Open"
D.Open"
ForInputAs#5,Open"
ForRandomAs#6
当打开一个文件并为它指定一个文件号后,该文件号就代表该文件,直到文件被关闭后,此文件号才可以再被其他文件使用,所以A是错误的。
以Output打开的文件在关闭之前不能用不同的文件号重复地打开它,所以B和C是错误的。
但在Input、Random和Binary模式下,可以用不同的文件号打开同一个文件,故答案为C。
考点二:
以Output、Append、Random和Binary模式打开一个不存在的文件,VB会创建一个相应的文件。
文件号被视为“文件柄”,文件不能同时被不同的文件号“写”,可以多“读”。
在Input、Random和Binary模式下,可以用不同的文件号打开同一个文件,但以Output和Append模式打开的文件在关闭之前不能用不同的文件号重复打开它;
如果以Output模式打开一个已存在的顺序文件,则该文件中原来数据将被覆盖。
(2001秋27题)若磁盘文件C:
\Data1.dat不存在,下列打开文件语句中,会产生错误的是___27___。
C:
\Data1.dat"
ForOutputAs#1
ForInputAs#2
ForAppendAs#3
ForBinaryAs#4
答案B是以Input方式打开一个不存在的文件,会产生错误,故答案是B。
当打开顺序文件作为Input时,该文件必须已经存在,否则,会产生一个错误。
然而,当打开一个不存在的文件作为Output或Append时,Open语句首先创建该文件,然后再打开它。
考点三:
Output——对文件进行写操作;
Input——对文件进行读操作;
(1999秋29题)要对顺序文件进行写操作,下列打开文件语句中正确的是___29___。
file1.txt"
ForOutputAs#1
ForInputAs#1
ForRandomAs#1
ForBinaryAs#1
要对顺序文件进行写操作,故答案是A。
考点四:
文件号:
Output——设定为顺序输出(写操作)模式。
以Output打开的一个已经存在的顺序文件,则该文件中原有的数据将被覆盖。
(2002春28题)要向已有数据的C:
\test\test.txt文件添加数据,正确的文件打开命令是___28___。
\test\test.txt"
ForAppendAs#512
ForAppendAs#511
ForOutputAs#512
ForOutputAs#511
文件为1~511,故A、C是错误的,Append为添加模式,以Output打开的一个已经存在的顺序文件,则该文件中原有的数据将被覆盖。
故答案是B。
考点五:
可用Close语句关闭文件,但当程序结束时,所有的文件就会自动关闭。
Lock语句与Unlock语句总是成对出现,在关闭文件或结束程序之前,必须用Unlock语句对先前锁定的文件解锁,否则会产生难以预料的错误。
可以用不同的文件号同时打开一个随机文件。
(2001春27题)下列______说法是不正确的。
A.当程序正常结束时,所有没用Close语句关闭的文件都会自动关闭
B.在关闭文件或程序结束之前,可以不用Unlock语句对已锁定的记录解锁
C.可以用不同的文件号同时打开一个随机文件
D.用Output模式打开一个顺序文件,即使不对它进行写操作,原来内容也被清除
答案是B。
(2003秋28题).下列说法______是不正确的。
A.当程序正常结束时,所有没用Close语句关闭的文件都会自动关闭
B.在关闭文件或程序结束之前,可以不用Unlock语句对已琐定的记录解琐
C.可以用不同的文件打开同一个随机文件
D.用Output模式打开一个顺序文件,即使不对它进行写操作,原来内容也被清除
答案是C。
Unlock语句释放由Lock语句设置的对一个文件的多重访问保护。
在关闭文件或结束程序之前,必须用Unlock语句对先前锁定的文件解锁,否则可能会产生难以预料的错误。
考点六:
Open文件名[For模式][Access存取类型][锁定]As[#]文件号[Len=记录长度],模式:
InPut#语句是从一个打开的顺序文件中读取数据,并把这些数据赋值给相应的变量,其格式是Input#文件号[,变量表]。
在C盘根目录下有一数据文件(cj.dat),内容如下:
(1999秋10题)
第一列数据表示学号,第二列数据表示数学成绩,第三列数据表示语文成绩,要求根据学号计算学生的总分,并按总分从高到低次序在窗体上输出。
现有程序如下:
9901,
56,
78
9902,
97,
89
9903,
67,
75
9904,
78,
76
9905,
100,
90
Dima(5,4)AsInteger
PrivateSubForm_Click()
DimiAsInteger,jAsInteger
Open"
c:
\cj.dat"
ForInputAs#1
Fori=1To5
Forj=1To3
___(InPut#1,a(i,j))
Nextj
___(a(i,4))__=a(i,2)+a(i,3)
Nexti
Sort
Forj=1To4
Printa(i,j),
Print
Close#1
EndSub
PrivateSubSort()
DimiAsInteger,jAsInteger,kAsInteger,tempAsInteger
Fori=1To4
Forj=i+1To5
Ifa(i,4)<
a(j,4)Then
Fork=1To___(4)__
temp=a(i,k)
a(i,k)=a(j,k)
a(j,k)=temp
Nextk
EndIf
用“Open"
ForInputAs#1“语句打开C:
\cj.dat文件,供读出数据,指定文件号#1,再用“InPut#1,a(i,j)”语句从打开的顺序文件#1中读取数据,并把这些数据赋值给相应的数组变量,进行操作,使用完文件后用“Close#1”语句关闭文件。
数组第4列内的数据为成绩之和。
两行数据交换操作。
(2000春第9题)本程序的功能是在二维数组中查找鞍点元素,即该元素在所在行中为最大,且在所在列中为最小。
在一个数组中可能存在,也可能不存在这样的元素。
数组各元素的值从文件data.txt中读取。
Dima(3,3)AsInteger,iAsInteger,jAsInteger
DimmaxvrAsInteger,colAsInteger,flgAsInteger
data.txt"
Fori=1To3
Input#1,a(i,j)
Printa(i,j);
maxvr=___(a(i,1))___
col=1
Forj=2To3
Ifmaxvr<
a(i,j)Then
maxvr=___(a(i,j))___
col=j
EndIf
Ifmaxvr>
a(j,col)Then___(ExitFor)___
Ifj>
3Then
Print"
a("
;
i;
"
"
col;
)="
a(i,col)
flg=1
If___(flg=0)___ThenPrint"
鞍点元素不存在"
ForInputAs#1“语句打开文件data.txt,供读出数据,指定文件号#1,再用“Input#1,a(i,j)”语句从打开的顺序文件#1中读取数据,并把这些数据赋值给相应的数组变量。
考点七:
Input函数是以字符串的形式返回以Input或Binary模式打开的文件中读出的一个或多个字符,其格式为Input(n,[#]文件号),n指明从文件中一次读出的字符的个数。
(2000秋第六题)下面程序的功能是统计当前盘当前文件夹中的顺序文件dta.txt中共有多少个英文单词,约定连续出现的英文字母定义为一个单词。
OptionExplicit
DimCharAsString,StAsString,TemAsString
DimIdxAsInteger,JsAsLong,FlenAslong
DimFAsBoolean,WAsString*1
___(Open"
ForInputAs#10)___
Flen=Lof(10)
St=Input(Flen,#10)
Js=1
DoWhileJs<
=FlenThen
W=Mid(St,Js,1)
If(W>
="
A"
AndW<
Z"
OrW>
a"
z"
)_Then
Tem=Tem+W
F=True
ElseIfF=TrueThen
Idx=Idx+1
ReDimPreserveChar(Idx)
Char(Idx)=Tem
Tem=("
)
F=False
___(js=js+1)___
Loop
共有"
;
Idx;
个单词"
ForJs=1ToIdx
PrintChar(Js)
NextJs
用“(Open"
ForInputAs#10)“语句打开文件data.txt,供读出数据,指定文件号#10,用“Lof(10)”函数返回已用Open语句打开的#10文件的字节数赋给变量Flen。
再用“Input(Flen,#10)”函数返回用以Input模式打开的文件中读出的所有字符。
考点八:
Eof文件操作函数用于判断是否到达文件末尾,当文件指针到达文件末尾部分时返回“True”,否则返回“False”,其格式为:
Eof(文件号)。
(2001春第8题)下面程序得功能是将无序数组中相同得数只保留一个,其余得删除,并输出经过删除后的数组元素,删除相同数是通过将该数组元素后面的元素在数组内依次前移替换前一个元素的值实现的。
OptionExplict
OptionBase1
DimIAsInteger,JAsInteger,KAsInteger
DimA()AsInteger,TAsInteger,MAsInteger
\mydocuments\2000test\data.txt"
DoWhile___(NotEof
(1))__
I=I+1
RedimPreseveA(I)
Input#1,A(I)
M=1:
T=___(I或Ubound(A))__
DoWhileM<
T
I=M+1
DoWhileI<
=T
IfA(I)=A(M)Then
ForJ=1To___(T-1)__
A(J)=A(J+1)
NextJ
T=T-1
Else
I=___(I+1)__
M=M+1
RedimPreseveA(T)
ForI=1ToT
PrintA(I);
NextI
ForInputAs#1)“语句打开文件c:
\mydocuments\2000test\data.txt,供读出数据,指定文件号#1,用“Eof
(1)”函数判断文件指针是否到达末尾。
再用“Input#1,A(I)”语句从打开的顺序文件#1中读取数据,并把这些数据赋值给相应的数组变量。
(2001秋第8题)C盘根目录下文件Data4.txt的内容是:
2,4,6,8,10,1,3,5,7,9。
下面程序的功能是将文件后半部分的奇数分别按序插入到前半部分的适当位置,得到的新数列是:
12345678910。
(实现方法:
第一次调整后的数列是:
1268103579第二次调整后的数列是:
12346810579)。
DimA(10)AsInteger,iAsInteger,JAsInteger
\Data4.txt"
ForInputAs#12
Do___whilenotEof(12)__
J=J+1
Input#12,A(J)
CallInsert(A)
Fori=1To10
PrintA(i)
Close#12
PrivateSubInsert(A()AsInteger)
DimiAsInteger,PutpAsInteger,JAsInteger
DimGetpAsInteger,NAsInteger,TemAsInteger
N=UBound(A)/2
Putp=1
Getp=N+1
Fori=1ToN
Tem=A(Getp)
ForJ=GetpToPutp+1Step-1
__A(J)=A(J-1)__
A(Putp)=Tem
Getp=Getp+1
Putp=___Putp+2__
ForInputAs#12)“语句打开文件c:
\Data4.txt,供读出数据,指定文件号#12,用“Eof(12)”函数判断文件指针是否到达末尾。
再用“Input#12,A(J)”语句从打开的顺序文件#12中读取数据,并把这些数据赋值给相应的数组变量。
最后用“Close#12“关闭文件。
.下面程序的功能是统计文件中英文字母(不区分大小写)出现的个数。
(2003秋第8题)
PrivateSubCommand1_Click()
Dimalpha(26)AsInteger,nAsInteger
DimiAsInteger,sAsString
\kav2003\readme.txt"
ForInputAs#11
DoWhileNotEOF(11)
s=Input(1,11)
s=UCase(s)
Ifs>
Ands<
Then
n=Asc(s)-64
alpha(n)=alpha(n)+1
EndIf
Fori=1To26
Ifalpha(i)<
>
0Then
List1.AddItemChr(i+64)&
:
&
CStr(alpha(i))
Close
Input函数
函数功能:
以字符串形式返回从某个以Input或Binary模式打开的文件中读出的一个或多个字符。
语法格式:
Input(n,[#]文件号)
说明:
n是任意合法的数值型表达式,指明了从文件中一次读出字符的个数。
与Input#语句不同,Input函数返回所读的所有字符,包括前导空格、逗号、双引号以及回车换行符。
练习:
1.VB的文件管理控件是_____.
A.驱动器列表框、目录列表框、文件列表框
B.驱动器列表框、目录列表框、组合框
C.文本框、目录列表框、文件列表框
D.A.