回 帖 发 新 帖 刷新版面

主题:Fortran 选择读写文件格式问题

Fortran 读写文件问题 
open(1,file='1.dat')
写文本文件 write(1,*)变量值
写二进制文件 write(1)变量值

我想写一个通过语句 来读写文件 伪代码如下:
if 存为文本
 str=‘,*’
else 存为二进制
 str=‘’
end if
open(1,file='1.dat')
write(1&str)
有没有办法办到 不要告诉我采用下面的方法 因为数据量大 写一次数据就要判断一次 容易拖慢程序速度
if 存为文本
 write(1,*)
else 存为二进制
 write(1)
end if
有fortran的高手么?

回复列表 (共17个回复)

沙发

有人给点提示不... 感谢啊 我不想把一大段代码复制到if ... else的else下...

板凳

很遗憾的告诉你,我认为你不得不把 Open 语句也写在 If 判断语句里。

if 存为文本
  Open( 10 ,file = )
  write(1,*)
else 存为二进制
  Open( 10 ,file = , form = 'unformatted')
  write(1)
end if

3 楼

另外,我不认为你可以把文本数据和二进制文件写在同一个文件里。

因为文本数据的长度是不好确定的。

1.1 是3个字节
1.08 是 4个字节

而二进制,单精度就是4字节,双精度就是8字节。

如果二进制文件中加入部分文本数据,那么除非他们的字节数固定。

4 楼

不过也不是完全无法实现。

可以这样,假设你的数据都是 4字节。

real rD
character(Len=4) cD
EQUIVALENCE( rD , cD )

Open( 10 , file = , form = 'unformatted' ,access =' direct' , recl = 4 ) !// 4字节的记录长度

if 存为文本
  write( cD , '(f4.1)' ) 变量
else 二进制
  rD = 变量
end if

write( 10 , rec = i ) cD

5 楼

悲剧啊..
我本来想写成这样的(is_bin=0文本 is_bin=1二进制)
if is_bin=0 
open(1,file='')
str=',*'
else 
open(1,file='',form='binary')
str=''
end if

下面接着大段代码:
....
write(1 & str) 变量
.....

如果按照您三楼的方法  只能写成下面的

if is_bin=0
open(1,file='')
....
write(1,*) 变量
.....
else
open(1,file='',form='binary')
....
write(1) 变量
.....
end if
除了write其他代码重复了两次 很臃肿... =.=

我只想选择存为一种格式哦 不是一个文件存两种格式.. 呵呵 高人 你再看看有没有办法? 谢谢你的提示

6 楼

如果fortran有像Matlab中eval函数就好了
eval()函数的功能就是将括号内的字符串视为语句并运行 比如 eval('y1=sin(2)')和语句y1=sin(2)等价

7 楼

我说过了,你没有仔细看。

如果一个文件既有文本部分,又有二进制部分。那么它就是二进制文件!!

我不知道你写过二进制文件没有??

[quote]下面接着大段代码:
....
write(1 & str) 变量
[/quote]

这里的 str 是 format 吗??二进制是无格式的,unformatted!!!

你表述得太模糊了。

你好好看看我 4 楼的代码。我认为可以满足你的需要,除非你表达错了,或者我理解错了。

8 楼

[quote]如果fortran有像Matlab中eval函数就好了
eval()函数的功能就是将括号内的字符串视为语句并运行 比如 eval('y1=sin(2)')和语句y1=sin(2)等价[/quote]

这是不可能的,Fortran 是编译型语言。如果字符串能视为语句,那就代表着把编译器写入EXE里了。

Matlab 是解释型的,这有本质区别。

如果真的要写代码把字符串转成函数,或许可以写一些简单的自己转换。

9 楼

我写过二进制的文件的!!!
我只所以想选择文件类型来保存文件 是为了调试代码的方便...
调试的过程中 我可以将is_bin设置成0 程序产生的文件都是文本格式 我可以直接打开监视 如果所有代码都没有错 再将is_bin设置成1 重新运行 这个时候不用关心文件的内容
这样可以提高计算速度和减小存储空间...

这样应该表述清楚了吧... 我的文件要么是文本 要么是binary 这个是我的动机。。 =.= 我没有必要对一个文件一会存文本一会存binary...


10 楼

如果真的要写代码把字符串转成函数,或许可以写一些简单的自己转换。[/quote]

呵呵 这个说到点子上去了 就是这个不会...

我来回复

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