菜鸟问题:关于文件读写

mudga 2003-08-22 12:02:28
我想从数据文件中读出有规律的文件放到数组里面,这个文件是类似结构:
1 周 管理科 男 科长 1000 3000 4000
也就是一个类似数据库的文件,该如何解决?小弟第一次接触这个,手头苦于没有资料,请高手帮忙?
我的想法是先读出每一行数据,然后分割放到一个二维数组里面,后来发现分割数据的函数存储到数组里面有些困难,如果是记录的话又无法自动增量?
...全文
20 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
wumy_ld 2003-08-22
  • 打赏
  • 举报
回复
要做成二维的就无需多说了
mudga 2003-08-22
  • 打赏
  • 举报
回复
可能我前面没有说清楚,我这里不能用sql,而且里面的数据已经用tab分好了,用什么分割不是问题,希望老大们回答我前面的问题?非常感谢
wumy_ld 2003-08-22
  • 打赏
  • 举报
回复
Private Sub Command1_Click()
Dim arrTemp
Dim strTemp As String
Dim i As Integer
Dim j As Integer
Dim test(7) As String

strTemp = "1 周 管理科 男 科长 1000 3000 4000"
arrTemp = Split(strTemp, " ")
For i = LBound(arrTemp) To UBound(arrTemp)
If Trim(arrTemp(i)) <> "" Then
test(j) = arrTemp(i)
j = j + 1
End If
Next

For i = 0 To 7
MsgBox test(i)
Next
End Sub


至于从文本文件里读单行没什么问题吧,Line Input

给分吧:)
踏平扶桑 2003-08-22
  • 打赏
  • 举报
回复
可以用一个特定字符作为分界线,比如:chr(0),先读取一行,然后循环,在没有遇到chr(0)之前就是某个数组里的内容,否则是下一个的。
DragonBill 2003-08-22
  • 打赏
  • 举报
回复
先用select语句组合成一个用特殊符号组成的语句如:
1#周#管理科#男#科长#1000#3000#4000#
再用split分割后放在数组中
mudga 2003-08-22
  • 打赏
  • 举报
回复
这个倒不是问题,可以一行一行读,问题是它的结构是很有规则的,我如何放入数组里面?

2:就是将数据存成文件处理啊,也就是相当于数据库的思想了
rainstormmaster 2003-08-22
  • 打赏
  • 举报
回复
文本文件?
可当成数据库处理

踏平扶桑 2003-08-22
  • 打赏
  • 举报
回复
可以用一个特定字符作为分界线,比如:chr(0),先读取一行,然后循环,在没有遇到chr(0)之前就是某个数组里的内容,否则是下一个的。
mudga 2003-08-22
  • 打赏
  • 举报
回复
搞定了,多谢各位大哥!
mudga 2003-08-22
  • 打赏
  • 举报
回复
他说我数组维数已定义是什么意思啊?
wumy_ld 2003-08-22
  • 打赏
  • 举报
回复
dim strLine as string
dim arrTest(7,1) as string
dim i as long

i=2
Open "c:\test.txt" For Input As 1
do until eof(#1)
line input #1,strLine
ReDim Preserve arrTest(7,i)
i=i+1
..........
loop
mudga 2003-08-22
  • 打赏
  • 举报
回复
哈哈,我想到一个不用二维数组的办法了,可以用以为数组存成记录的形式,以后操纵也简单,试试看先
mudga 2003-08-22
  • 打赏
  • 举报
回复
果然是高手啊,非常感谢
我当然可以在声明我的二维数组时设的大点,但是我如何知道我的数组越界,而且如果先设这么大可能很浪费空间和效率
比如我这里,第二维确定=7,而这样array()(7)又证明是不行的
那我只能先array(),然后当要用的时候redim array(50,7),判断是否到50,到了再次redim?
wumy_ld 2003-08-22
  • 打赏
  • 举报
回复
在上面你需要用到Preserve关键字

打开文件用于追加(写到已经存在内容的后面):
Open "c:\test.txt" For Append As #1

而用Open "c:\test.txt" For Output As #1会覆盖掉原来的内容。
wumy_ld 2003-08-22
  • 打赏
  • 举报
回复
你的数组定义需要用到Redim语句,因为数组的大小不能事先确定:

ReDim 语句



在过程级别中使用,用于为动态数组变量重新分配存储空间。

语法

ReDim [Preserve] varname(subscripts) [As type] [, varname(subscripts) [As type]] . . .

ReDim 语句的语法包括以下几个部分:

部分 描述
Preserve 可选的。关键字,当改变原有数组最末维的大小时,使用此关键字可以保持数组中原来的数据。
varname 必需的。变量的名称;遵循标准的变量命名约定。
subscripts 必需的。数组变量的维数;最多可以定义 60 维的多维数组。subscripts 参数使用下面的语法:
[lower To] upper [,[lower To] upper] . . .
如果不显式指定 lower,则数组的下界由 Option Base 语句控制。如果没有 Option Base 语句则下界为 0。
type 可选的。变量的数据类型;可以是 Byte、Boolean、Integer、Long、Currency、Single、Double、Decimal(目前尚不支持)、Date、String(对变长的字符串)、String * length(对定长的字符串)、Object、Variant、用户定义类型或对象类型。所声明的每个变量都要有一个单独的 As type 子句。对于包含数组的 Variant 而言,type 描述的是该数组的每个元素的类型,不能将此 Variant 改为其它类型。


说明

ReDim 语句用来定义或重定义原来已经用带空圆括号(没有维数下标)的 Private、Public 或 Dim 语句声明过的动态数组的大小。

可以使用 ReDim 语句反复地改变数组的元素以及维数的数目,但是不能在将一个数组定义为某种数据类型之后,再使用 ReDim 将该数组改为其它数据类型,除非是 Variant 所包含的数组。如果该数组确实是包含在某个 Variant 中,且没有使用 Preserve 关键字,则可以使用 As type 子句来改变其元素的类型,但在使用了此关键字的情况下,是不允许改变任何数据类型的。

如果使用了 Preserve 关键字,就只能重定义数组最末维的大小,且根本不能改变维数的数目。例如,如果数组就是一维的,则可以重定义该维的大小,因为它是最末维,也是仅有的一维。不过,如果数组是二维或更多维时,则只有改变其最末维才能同时仍保留数组中的内容。下面的示例介绍了如何在为已有的动态数组增加其最末维大小的同时而不清除其中所含的任何数据。

ReDim X(10, 10, 10)
. . .
ReDim Preserve X(10, 10, 15)

同样地,在使用 Preserve 时,只能通过改变上界来改变数组的大小;改变下界则会导致错误。

如果将数组改小,则被删除的元素中的数据就会丢失。如果按地址将数组传递给某个过程,那么不要在该过程内重定义该数组的各维的大小。

在初始化变量时,数值变量被初始化为 0,变长的字符串被初始化为一个零长度的字符串 (""),而定长的字符串则用 0 填充。Variant 变量被初始化为 Empty。用户自定义类型的变量的每个元素作为各自独立的变量进行初始化。在使用引用对象的变量之前,必须使用 Set 语句将一个已有的对象赋给该变量。在被赋值之前,所声明的对象变量有一个特定值 Nothing,这个值表示该变量没有指向任何对象的实例。

小心 如果 ReDim 语句所使用的变量在模块级别或过程级别不存在,则该语句就相当于一个声明语句。如果此后在一个更广的范围内又创建了同名的变量,即使使用了 Option Explicit,ReDim 也将使用后声明的这个变量,且不会导致编译错误。为了避免这种冲突,就不应把 ReDim 作为声明语句使用,而只应作为重定义数组大小的语句。

注意 要改变 Variant 所包含的数组的大小,必须在试图改变其数组大小之前显式声明该 Variant 变量。
mudga 2003-08-22
  • 打赏
  • 举报
回复
非常感谢,前面的文件读已经搞定
但是似乎不能把数组申明成array()(7)这样吧
还有如何添加文件,output?
wumy_ld 2003-08-22
  • 打赏
  • 举报
回复
读单行:
dim strLine as string

Open "c:\test.txt" For Input As 1
do until eof(#1)
line input #1,strLine
loop
wumy_ld 2003-08-22
  • 打赏
  • 举报
回复
打开文件用于读:
Open "c:\test.txt" For Input As 1
wumy_ld 2003-08-22
  • 打赏
  • 举报
回复
Line Input # 语句


从已打开的顺序文件中读出一行并将它分配给 String变量。

语法

Line Input #filenumber, varname

Line Input # 语句的语法具有以下几个部分:

部分 描述
filenumber 必要。任何有效的文件号。
varname 必要。有效的 Variant 或 String 变量名。


说明

通常用 Print # 将 Line Input # 语句读出的数据从文件中写出来。

Line Input # 语句一次只从文件中读出一个字符,直到遇到回车符 (Chr(13)) 或回车–换行符 (Chr(13) + Chr(10)) 为止。回车–换行符将被跳过,而不会被附加到字符串上。
mudga 2003-08-22
  • 打赏
  • 举报
回复
还有我可以申明array()(7)这样的形式嘛?
加载更多回复(1)

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧