问一个关于文件读写操作的问题
我自定义了一个type
type
Name as string
Id as integer
Class as string
end type
想把它写到一个文件中去,文件名自己定
比如,今天写了3,4个rec进去了。明天想删除其中一个,或者想增加两个.
后天想查询.
就是说想实现文件象数据库那样的操作,可以吗?
不想用数据库。...因为数据量不是很大,而且很容易出问题.就想用文件来解决
问题点数:0、回复次数:14Top
1 楼rainstormmaster(暴风雨 v2.0)回复于 2005-04-01 15:45:41 得分 0
可以考虑使用xml文件Top
2 楼qiqi5521()回复于 2005-04-01 15:47:56 得分 0
如果要实现删除操作,最快的方法是加入删除标记,而不是真的删除,而且每隔一段时间可以让用户选择优化一次文件。不然的话效率会很低。
type
Delete as boolean'删除标记,只有优化文件的时候才真正删除数据
Name as string
Id as integer
Class as string
end type
Top
3 楼seabird125(海鸥)回复于 2005-04-01 15:48:46 得分 0
有例子吗?好象可以通过文件操作实现的Top
4 楼Gutta(冯大狂)回复于 2005-04-01 15:51:47 得分 0
当然可以了啊~~
思路是这样的,一般来说,对于记录形式的文件操作使用“随即访问模式”
Open "C:\a.txt" For Random As #1 Len=Len(Typename)
对于写入:
Put #文件号,[记录号],变量名
Put #1,,Record1
上面一句省略记录号,则表示在当前记录后插入一条记录,常用于连续写入时。
对于读取操作:
Get #文件号,[记录号],变量名
Get #1,1,FirstRec
读取文件1的第一个记录到FirstRec中去
如果省略记录号,则表示读出当前记录后的一条记录,也用于连续读取。
对于查询操作:
一般来说,有两种方法,一种是查询法,一种是直接取得。
查询法很简单就是用一个循环比较ID:
Count= Lof(1)/Len(Record)
For i=1 to Count
Get #1,i,TmpRec
if TmpRec=ID Then Exit For
Next
if i = Count + 1 then
Msgbox "NULL"
else
QueryRec = TmpRec
end if
还有一种是直接取得法,更快捷,是利用记录大小和记录ID来直接求得记录起始地址。
Get #1,QueryRec.ID,QueryRec
当然,前提是有一个递增的ID,就像ACCESS中的自动增长字段类型一样。
Top
5 楼Gutta(冯大狂)回复于 2005-04-01 15:53:35 得分 0
删除文件,不太好操作,qiqi5521() 的建议可以采纳Top
6 楼seabird125(海鸥)回复于 2005-04-01 15:56:07 得分 0
问题是如何产生这个自动增长的ID呢?
还有如何修改某条记录该怎么办呢Top
7 楼TechnoFantasy((VB MVP)www.applevb.com)回复于 2005-04-01 15:57:54 得分 0
同意 rainstormmaster(暴风雨 v2.0) 的思路Top
8 楼seabird125(海鸥)回复于 2005-04-01 16:03:22 得分 0
对某个记录号做标记也存在对记录的修改啊...
否则怎么做删除标记呢Top
9 楼qiqi5521()回复于 2005-04-01 16:22:06 得分 0
以二进制方式打开文件,则当你用put语句的时候,就是直接覆写当前文件指针处的数据。
比方说我要覆盖文件的第一个字节,put #1,1,255
Top
10 楼seabird125(海鸥)回复于 2005-04-01 16:27:08 得分 0
可是直接在rec里面定位指针很困难吧.
不可能知道是哪一个字节的Top
11 楼qiqi5521()回复于 2005-04-01 16:45:28 得分 0
用LenB()函数可以得到结构的所占用的字节数。Top
12 楼qiqi5521()回复于 2005-04-01 16:48:27 得分 0
如果数据量不是很大,用 XML 或文本文件处理起来会更方便,也比较便于调试。毕竟现在不是Dos时代了,用文本文件虽然要多占一些硬盘空间,但与换来的开发效率比起来,是非常值得的。Top
13 楼Gutta(冯大狂)回复于 2005-04-01 16:48:55 得分 0
XML...
很不错的东东,可惜不会用.Top
14 楼suolong123(JJ掉了不过碗大个疤)回复于 2005-04-01 20:05:15 得分 0
XML我还没学呀!
下一期的课程!Top




