关于查找txt文件匹配行后再读取几行数据的问题,求高手解答!
我正在设计一个查询系统,就是先输入id,然后即可查询出此id的基本信息。
文本如下
1234
0
10.5
0.842
2011/6/14
20分钟
1235
10.5
22.5
0.842
2011/6/14
25分钟
1236
22.5
41
0.842
2011/6/14
1小时
1237
41
65.5
0.842
2011/6/15
4小时
文本中的1234,1235,1236....就是需要索引的id号,请问如何编写程序,才能使得我在text1(0).text中输入“1234”时
点击“查询”按钮,可以把txt文本“1234”所在行的后5行数据写入text1(1)到(5)中去?
文本如下
1234
0
10.5
0.842
2011/6/14
20分钟
1235
10.5
22.5
0.842
2011/6/14
25分钟
1236
22.5
41
0.842
2011/6/14
1小时
1237
41
65.5
0.842
2011/6/15
4小时
文本中的1234,1235,1236....就是需要索引的id号,请问如何编写程序,才能使得我在text1(0).text中输入“1234”时
点击“查询”按钮,可以把txt文本“1234”所在行的后5行数据写入text1(1)到(5)中去?
作者: nuliyouxi 发布时间: 2011-06-15
建议LZ采用随机文件读写文件
随机型访问文件中的字节构成相同的一些记录,每个记录包含一个或多个字段。具有一个字段的记录对应于任一标准类型,比如整数或者定长字符串。具有多个字段的记录对应于用户定义类型。例如,下边所定义的 Worker Type 创建由三个字段组成的 19 个字节的记录。
Type Worker
LastNameAs String * 10
TitleAs String * 7
RankAs String * 2
End Type
声明变量
在应用程序打开以随机型访问的文件以前,应先声明所有用来处理该文件数据所需的变量。这包括用户定义类型的变量,它对应该文件中的记录,和标准类型的其它变量,这些变量保存为随机型访问而打开的文件与处理相关的数据
定义记录类型
在打开一个文件进行随机访问之前,应定义一个类型,该类型对应于该文件包含或将包含的记录。例如,一个雇员记录文件可定义一个称为 Person 的用户定义的数据类型,如下所述:
Type Person
ID As Integer
MonthlySalary As Currency
LastReviewDate As Long
FirstName As String * 15
LastName As String * 15
Title As String * 15
ReviewComments As String * 150
End Type
在类型定义中声明字段变量
因为随机访问文件中的所有记录都必须有相同的长度,所以固定的长度对用户定义类型中的各字符串元素通常很有用,就象以上的 Person 类型说明中所示的一样,在此作为例子,FirstName 与 LastName 都具有 15 个字符的固定长度。
如果实际字符串包含的字符数比它写入的字符串元素的固定长度少,则 Visual Basic 会用空白(字符代码 32)来填充记录中后面的空间。还有,如果字符串比字段的尺寸长,则它就会被截断。如果使用 长度可变的字符串,则任何用 Put 存储的或用 Get 检索的记录总长度都不能超过在 Open 语句的 Len 分句中所指定的记录长度。
声明其它变量
在定义与典型记录对应的类型以后,应接着声明程序需要的任何其它变量,用来处理作为随机访问而打开的文件。例如:
'记录变量。
Public Employee As Person
'跟踪当前记录。
Public Position As Long
'文件中最后那条记录的编号。
Public LastRecord As Long
打开随机访问的文件
要打开随机访问的文件,Open 语句使用以下语法:
Open pathname [For Random] As filenumber Len = reclength
因为 Random 是缺省的访问类型,所以 For Random 关键字是可选项。
表达式 Len = reclength 指定了每个记录的尺寸in bytes. Note that every string variable in Visual Basic stores a Unicode string and that you must specify the byte length of that Unicode string。如果 reclength 比写文件记录的实际长度短,则会产生一个错误。如果 reclength 比记录的实际长度长,则记录可写入,只是会浪费些磁盘空间。
可用以下代码打开文件:
Dim FileNum As Integer, RecLength As Long, Employee As Person
'计算每条记录的长度。
RecLength = LenB(Employee)
'取出下一个可用文件编号。
FileNum = FreeFile
'用 Open 语句打开新文件。
Open "MYFILE.FIL" For Random As FileNum Len = RecLength
编辑随机型访问打开的文件
如要编辑随机型访问的文件,请先把记录从文件读到程序变量,然后改变各变量的值,最后,把变量写回该文件。后面各节讨论如何编辑随机型访问打开的文件。
把记录读入变量
使用 Get 语句把记录复制到变量。例如,要把一个记录从雇员记录文件拷贝到 Employee 变量,可使用以下代码:
Get FileNum, Position, Employee
在这行代码中,FileNum 包含用于打开文件的 Open 语句的编号;Position 包含要拷贝的记录数;而 Employee 声明为用户定义类型 Person,它用来接收记录的内容。
把变量写入记录
使用 Put 语句把记录添加或者替换到随机型访问打开的文件。
替换记录
要替换记录,请使用 Put 语句,指定想要替换的记录位置,例如:
Put #FileNum, Position, Employee
这个代码将用 Employee 变量中的数据来替换由 Position 所指定的编号的记录。
添加记录
要向随机访问打开的文件的尾端添加新记录,应使用前述代码段中所示的 Put 语句。把 Position 变量的值设置为比文件中的记录数多 1。例如,要在一个包含五个记录的文件中添加一个记录,把 Position 设置为 6。
下述语句把一个记录添加到文件的末尾:
LastRecord = LastRecord + 1
Put #FileNum, LastRecord, Employee
删除记录
通过清除其字段可以删除一个记录,但是该记录仍在文件中存在。通常文件中不能有空记录,因为它们会浪费空间且会干扰顺序操作。最好把余下的记录拷贝到一个新文件,然后删除老文件。
要清除随机访问文件中删除的记录,请按照以下步骤执行:
创建一个新文件。
把有用的所有记录从原文件复制到新文件。
关闭原文件并用 Kill 语句删除它。
使用 Name 语句把新文件以原文件的名字重新命名。
详细信息 有关随机文件访问的其它信息,请参阅“Open 语句”。
随机型访问文件中的字节构成相同的一些记录,每个记录包含一个或多个字段。具有一个字段的记录对应于任一标准类型,比如整数或者定长字符串。具有多个字段的记录对应于用户定义类型。例如,下边所定义的 Worker Type 创建由三个字段组成的 19 个字节的记录。
Type Worker
LastNameAs String * 10
TitleAs String * 7
RankAs String * 2
End Type
声明变量
在应用程序打开以随机型访问的文件以前,应先声明所有用来处理该文件数据所需的变量。这包括用户定义类型的变量,它对应该文件中的记录,和标准类型的其它变量,这些变量保存为随机型访问而打开的文件与处理相关的数据
定义记录类型
在打开一个文件进行随机访问之前,应定义一个类型,该类型对应于该文件包含或将包含的记录。例如,一个雇员记录文件可定义一个称为 Person 的用户定义的数据类型,如下所述:
Type Person
ID As Integer
MonthlySalary As Currency
LastReviewDate As Long
FirstName As String * 15
LastName As String * 15
Title As String * 15
ReviewComments As String * 150
End Type
在类型定义中声明字段变量
因为随机访问文件中的所有记录都必须有相同的长度,所以固定的长度对用户定义类型中的各字符串元素通常很有用,就象以上的 Person 类型说明中所示的一样,在此作为例子,FirstName 与 LastName 都具有 15 个字符的固定长度。
如果实际字符串包含的字符数比它写入的字符串元素的固定长度少,则 Visual Basic 会用空白(字符代码 32)来填充记录中后面的空间。还有,如果字符串比字段的尺寸长,则它就会被截断。如果使用 长度可变的字符串,则任何用 Put 存储的或用 Get 检索的记录总长度都不能超过在 Open 语句的 Len 分句中所指定的记录长度。
声明其它变量
在定义与典型记录对应的类型以后,应接着声明程序需要的任何其它变量,用来处理作为随机访问而打开的文件。例如:
'记录变量。
Public Employee As Person
'跟踪当前记录。
Public Position As Long
'文件中最后那条记录的编号。
Public LastRecord As Long
打开随机访问的文件
要打开随机访问的文件,Open 语句使用以下语法:
Open pathname [For Random] As filenumber Len = reclength
因为 Random 是缺省的访问类型,所以 For Random 关键字是可选项。
表达式 Len = reclength 指定了每个记录的尺寸in bytes. Note that every string variable in Visual Basic stores a Unicode string and that you must specify the byte length of that Unicode string。如果 reclength 比写文件记录的实际长度短,则会产生一个错误。如果 reclength 比记录的实际长度长,则记录可写入,只是会浪费些磁盘空间。
可用以下代码打开文件:
Dim FileNum As Integer, RecLength As Long, Employee As Person
'计算每条记录的长度。
RecLength = LenB(Employee)
'取出下一个可用文件编号。
FileNum = FreeFile
'用 Open 语句打开新文件。
Open "MYFILE.FIL" For Random As FileNum Len = RecLength
编辑随机型访问打开的文件
如要编辑随机型访问的文件,请先把记录从文件读到程序变量,然后改变各变量的值,最后,把变量写回该文件。后面各节讨论如何编辑随机型访问打开的文件。
把记录读入变量
使用 Get 语句把记录复制到变量。例如,要把一个记录从雇员记录文件拷贝到 Employee 变量,可使用以下代码:
Get FileNum, Position, Employee
在这行代码中,FileNum 包含用于打开文件的 Open 语句的编号;Position 包含要拷贝的记录数;而 Employee 声明为用户定义类型 Person,它用来接收记录的内容。
把变量写入记录
使用 Put 语句把记录添加或者替换到随机型访问打开的文件。
替换记录
要替换记录,请使用 Put 语句,指定想要替换的记录位置,例如:
Put #FileNum, Position, Employee
这个代码将用 Employee 变量中的数据来替换由 Position 所指定的编号的记录。
添加记录
要向随机访问打开的文件的尾端添加新记录,应使用前述代码段中所示的 Put 语句。把 Position 变量的值设置为比文件中的记录数多 1。例如,要在一个包含五个记录的文件中添加一个记录,把 Position 设置为 6。
下述语句把一个记录添加到文件的末尾:
LastRecord = LastRecord + 1
Put #FileNum, LastRecord, Employee
删除记录
通过清除其字段可以删除一个记录,但是该记录仍在文件中存在。通常文件中不能有空记录,因为它们会浪费空间且会干扰顺序操作。最好把余下的记录拷贝到一个新文件,然后删除老文件。
要清除随机访问文件中删除的记录,请按照以下步骤执行:
创建一个新文件。
把有用的所有记录从原文件复制到新文件。
关闭原文件并用 Kill 语句删除它。
使用 Name 语句把新文件以原文件的名字重新命名。
详细信息 有关随机文件访问的其它信息,请参阅“Open 语句”。
作者: zdingyun 发布时间: 2011-06-15
VB code
不过最好还是用数据库吧~~~
Private Sub Command1_Click() Open "d:\test.txt" For Input As #1 Do While Not EOF(1) Line Input #1, inputdata If Trim(inputdata) = Trim(Text1(0).Text) Then For i = 1 To 5 Line Input #1, inputdata Text1(i).Text = inputdata Next i End If Loop Close #1 End Sub
不过最好还是用数据库吧~~~
作者: chinayuppie 发布时间: 2011-06-15
引用 2 楼 chinayuppie 的回复:
VB code
Private Sub Command1_Click()
Open "d:\test.txt" For Input As #1
Do While Not EOF(1)
Line Input #1, inputdata
If Trim(inputdata) = Trim(Text1(0).Text) Then
For i = 1 T……
VB code
Private Sub Command1_Click()
Open "d:\test.txt" For Input As #1
Do While Not EOF(1)
Line Input #1, inputdata
If Trim(inputdata) = Trim(Text1(0).Text) Then
For i = 1 T……
for 循环中应该加上一个exit sub的~~~
作者: chinayuppie 发布时间: 2011-06-15
VB code
楼上的代码加一句。
如果数据量大,用数据库,如果小,可用此方法。也可用文本,建议将每个记录用空格分开,写成一行,行读时不会产生歧义。
Private Sub Command1_Click() Open "d:\test.txt" For Input As #1 Do While Not EOF(1) Line Input #1, inputdata If Trim(inputdata) = Trim(Text1(0).Text) Then For i = 1 To 5 Line Input #1, inputdata Text1(i).Text = inputdata Next i [color=#FF0000]Exit Do[/color] End If Loop Close #1 End Sub
楼上的代码加一句。
如果数据量大,用数据库,如果小,可用此方法。也可用文本,建议将每个记录用空格分开,写成一行,行读时不会产生歧义。
作者: z_wenqian 发布时间: 2011-06-15