回 帖 发 新 帖 刷新版面

主题:[讨论]请教输出到文件的问题

有两个一维数组,我想实现首先将第一个数组写到文件中的一列,然后第二个数组写在第一列的右边。
现在的问题是,按列写完第一个数组,这时候再写默认是接着第一列的最后的,如果使用REWIND函数,又会在写第二列后将第一列覆盖。不知道有什么方法实现我的需求。
谢谢。

回复列表 (共8个回复)

沙发

你两个同时输出不行么?干嘛非得一个一个的输出呢?

板凳

可以考虑的办法有:

1.等你两个数组都得到结果以后一起输出。
Do i = 1, N行
  write(12,*) a(i) , b(i)
End Do

2.先把 a 数组写到临时文件里。等 b 数组有了数据结果以后。
Do i = 1 , N行
  Read(临时文件,*) rTemp
  Write(最终文件,*) rTemp , b(i)
End Do

3 楼

分开写效率肯定会降低不少,不过如果楼主使用二进制文件的话就基本没有效率问题了:)

4 楼

明白你说的意思。我这里说两个数组是打个比方。实际中是:一个数组,计算一次被更新,写入文件;又一个循环,这个数组被更新,再写入一次。如果反复几次,声明几个数组,浪费内存。
其实我本以为有现成的库函数能简单实现这个功能,看了两位高手的回复,应该是没这样的现成函数。
不过臭石头雪球的第二个方法可行,当数据量大时可以节约内存。

5 楼


嗯,第二种方法适合我的需求。谢谢!

6 楼

楼主能确定要输出几轮么?
如果确定需要输出N轮可以这样:
第一轮输出用:
WRITE(REC=i*n+1)a(i)
第二轮输出用:
WRITE(REC=i*n+2)a(i)
……
第K轮输出用:
WRITE(REC=i*n+K)a(i)

当然上面这些都是伪代码:)你需要做一定的调整才能使用:)

7 楼


想请教,REC只能用于直接存取文件么?REC代表每次写入的宽度,是不是必须和OPEN中RECL的长度保持一致?
这个用法我测试没成功,主要是不熟悉REC的意义,能否详解一下?谢谢!

8 楼

REC是代表第几个记录,RECL是每个记录的长度。
也不一定非得是直接存取的,FORMATTED也是可以的,但要记得在最后一轮时输出一个换行符,否则你的文件将没法儿看:)

我来回复

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