主题:请教一个简单问题
前日刘郎
[专家分:0] 发布于 2007-12-29 23:54:00
请教一个简单问题:子程序中可以打开随机文件并读,写吗?
我试过,似乎不行,参数表没法写入记录变量。我希望行,请老师指导。
回复列表 (共7个回复)
沙发
moz [专家分:37620] 发布于 2007-12-30 09:17:00
我是这样子猜想你的企图的:
(有点以小人之心度君子之腹之嫌)
你是要向某记录文件写入记录,
但不想在主程序里写,而希望使用一个子程或函数来进行读写。
以文件名,记录来作为参数。
那么我来告诉你,这是可以做到的。
1. 记录结构定义需要放在系统级,
A. 如果是单文件程序,只需要放在主程序里定义就可以了。
B. 如果是多文件的,应该放在(包含的)头文件位置里,
这样所有的函数和子程都不再需要重复定义了。
但函数和子程在单独使用的时候,一定记得在定义结构之后再调用。
2. 函数里明确参数变量类型。例如:
type T1
a as long
b as string * 11
end type
dim T2 as T0
T2.a=100
T2.b="ABC"
WriteRec T2
ReadRec T2
sub WriteRec(W1 as T1)
open ..... for random len=len(W1)
end sub
sub ReadRec(R1 as T1)
open ..... for random len=len(R1)
end sub
在QB里,好像不能定义函数返回值的类型,到了VB后就可以了。
板凳
前日刘郎 [专家分:0] 发布于 2007-12-30 19:17:00
非常感谢。
但还是不太懂,主要是
WriteRoc T2
ReadRoc T2
还有子程序参数表(W1 as T1)
(R1 as T1)
这些对我是新东西。我要做的是:一个大循环,循环前几次得到的中间结果,后面的循环进行调用,我想用子程前面存,后面取,直接在循环中,不行,文件一直打开,不行。用其他办法行是行,需一个数组,耗很多内存,不堪承受,看来需要vb。
3 楼
moz [专家分:37620] 发布于 2007-12-30 22:49:00
直接循环中,是可以的
文件一直打开,也可以
今天老婆盯着,明天跟你说.
4 楼
前日刘郎 [专家分:0] 发布于 2007-12-31 22:56:00
moz老师:我试过一直打开不行,可能出现了小错误,我误以为不行,我再试试。
5 楼
moz [专家分:37620] 发布于 2007-12-31 23:32:00
如果是for random方式,是可读可写的,
你只要定好位置就可以了,
你甚至可以跳空的,(跳空的部份会是一些被遗弃了的垃圾数据)
我不知道你的大循环是用来解决什么问题的,
除非你的数据量非常大,而且每一个数据都是用得上而不能丢弃的,
那么就要用更高级更新的语言去处理.
(其实如果设有(内存)虚拟磁盘,速度也不会慢,空间也不会小)
其实有很多关于树枝节(这些算法的高级概念我其实是不懂的,只是有样学样啥吹的)的问题
是没有必要保存所有枝节数据的,可以随时把旧的失去使用价值的空间腾空来存放新生成的数据,
以便后用的.不知道你是否听得明白?
6 楼
前日刘郎 [专家分:0] 发布于 2008-01-01 11:59:00
moz老师:从新试过,文件的存取都没问题,衷心感谢!
我的错误在把循环变量(I)直接作为记录变量了,无意中改变了循环变量,结果使循环进行不下去。
你的指导我很爱看,虽不甚懂,我想看多了也会懂点。
愿作你的学生。
请问:for random 方式是什么意思?
7 楼
moz [专家分:37620] 发布于 2008-01-01 16:05:00
随机方式(其实也可以说是记录方式)
我可没什么资格当老师,
只是如果你有问题的话,我将不遗余力,但愿不会误人子弟就好了。
我来回复