回 帖 发 新 帖 刷新版面

主题: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个回复)

11 楼

明白了!

之前误解你的意思,是因为你在主楼说

[quote]因为数据量大 写一次数据就要判断一次 容易拖慢程序速度
[/quote]

所以我以为你同一个文件想存为二进制,中间有一部分是文本呢。

如果“写文本文件或是写二进制文件”,这个并不因为循环过程而改变。

而是自始自终都固定的

那么用条件编译是最好的了。

如果不用条件编译,就

if 文本
  Open()
  Do
   write
  end do
  close
else 二进制
  Open( form = binary)
  Do
   write
  end do
  close
endif

或者写两个函数 write_to_text 和 write_to_binary

这是最直观的,虽然代码多一些。

但很整齐,也符合类似条件编译的概念。

不要想着用 

write(1 & str) 变量

这里的 str 这样的 format 格式符来控制二进制输出。记住,二进制是无格式的。

12 楼

[quote]
if 文本
  Open()
  Do
   write
  end do
  close
else 二进制
  Open( form = binary)
  Do
   write
  end do
  close
endif
[/quote]

呵呵 只能如此咯 ... 我昨天晚上就是按这个格式改了 没有办法啊 修改代码时有点不方便 改了if里面的还得对应改else里面.. 保持对应才行..

老外写的程序中 如果是存文本
open(1,file=)
write(1,*)变量 或 read(1,*)变量    不带格式
如果是二进制
open(1,file='unformatted') 或者open(1,file='binary')
write(1)变量 或 read(1)变量    也不带格式
我觉得这样很方便..
所以才想能不能用个str=',*'  看样子是不行了.. 

呵呵 行了 结贴之前 再问个弱问题....


我的主程序编译成
Main_Prog.exe
我弄一个start.bat
内容为
Main_Prog.exe
pause

俺想把控制台的运行结果保存成list.txt
我试了一下 Main_Prog.exe > list.txt 不行 好像和Dos下的情况不太一样
我用的inter fortran + visual studio 
石头大哥,有木有法子...

13 楼


俺觉得法子 肯定有滴 只是不太熟悉 语法..
呵呵..
要学的东西太多了 顾不过来了...

14 楼

为什么不行
只能说你输出的不是标准输出
不行就用Main_Prog.exe > list.txt 2>&1

你这个问题处理比较好的就是预编译处理方式,但预处理不是标准内容,所以不同编译器处理方式不同,ivf使用/fpp开关开启预编译。

15 楼

[quote]为什么不行
只能说你输出的不是标准输出
不行就用Main_Prog.exe > list.txt 2>&1

你这个问题处理比较好的就是预编译处理方式,但预处理不是标准内容,所以不同编译器处理方式不同,ivf使用/fpp开关开启预编译。[/quote]

呵呵 Main_Prog.exe > list.txt 就可以了
问题又来了 这样控制台就不显示程序的进度了 全部保存到list.txt
有没有办法让控制台显示 同时也保存到list.txt

16 楼

[quote][quote]为什么不行
只能说你输出的不是标准输出
不行就用Main_Prog.exe > list.txt 2>&1

你这个问题处理比较好的就是预编译处理方式,但预处理不是标准内容,所以不同编译器处理方式不同,ivf使用/fpp开关开启预编译。[/quote]

呵呵 Main_Prog.exe > list.txt 就可以了
问题又来了 这样控制台就不显示程序的进度了 全部保存到list.txt
有没有办法让控制台显示 同时也保存到list.txt[/quote]

直接没办法 必须使用多线程 一个线程保存文件 一个线程输出进度

17 楼


[em54][em54][em54][em54][em54]

我来回复

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