回 帖 发 新 帖 刷新版面

主题:请教一个简单问题

请教一个简单问题:子程序中可以打开随机文件并读,写吗?
我试过,似乎不行,参数表没法写入记录变量。我希望行,请老师指导。

回复列表 (共7个回复)

沙发

我是这样子猜想你的企图的:
(有点以小人之心度君子之腹之嫌)

你是要向某记录文件写入记录,
但不想在主程序里写,而希望使用一个子程或函数来进行读写。
以文件名,记录来作为参数。

那么我来告诉你,这是可以做到的。

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后就可以了。

板凳

非常感谢。
但还是不太懂,主要是
     WriteRoc T2
     ReadRoc T2
还有子程序参数表(W1 as T1)
      (R1 as T1)
这些对我是新东西。我要做的是:一个大循环,循环前几次得到的中间结果,后面的循环进行调用,我想用子程前面存,后面取,直接在循环中,不行,文件一直打开,不行。用其他办法行是行,需一个数组,耗很多内存,不堪承受,看来需要vb。

3 楼

直接循环中,是可以的
文件一直打开,也可以
今天老婆盯着,明天跟你说.

4 楼


moz老师:我试过一直打开不行,可能出现了小错误,我误以为不行,我再试试。

5 楼

如果是for random方式,是可读可写的,
你只要定好位置就可以了,
你甚至可以跳空的,(跳空的部份会是一些被遗弃了的垃圾数据)

我不知道你的大循环是用来解决什么问题的,
除非你的数据量非常大,而且每一个数据都是用得上而不能丢弃的,
那么就要用更高级更新的语言去处理.
(其实如果设有(内存)虚拟磁盘,速度也不会慢,空间也不会小)

其实有很多关于树枝节(这些算法的高级概念我其实是不懂的,只是有样学样啥吹的)的问题
是没有必要保存所有枝节数据的,可以随时把旧的失去使用价值的空间腾空来存放新生成的数据,
以便后用的.不知道你是否听得明白?

6 楼

moz老师:从新试过,文件的存取都没问题,衷心感谢!
我的错误在把循环变量(I)直接作为记录变量了,无意中改变了循环变量,结果使循环进行不下去。
你的指导我很爱看,虽不甚懂,我想看多了也会懂点。
愿作你的学生。
请问:for random 方式是什么意思?

7 楼

随机方式(其实也可以说是记录方式)
我可没什么资格当老师,
只是如果你有问题的话,我将不遗余力,但愿不会误人子弟就好了。

我来回复

您尚未登录,请登录后再回复。点此登录或注册