将列表定向数据写入未格式化的I / O.

时间:2015-02-05 19:43:10

标签: fortran

我正在尝试将未格式化的数据写入文件。它应该很简单,但在运行时它会引发错误;

  

forrtl:severe(257):格式化I / O到单元打开以进行无格式传输,单元1,文件〜/目的地

我很难给出一个有效的例子,因为它包含在一个复杂的气候模型子程序中,但我最好的代表它是:

      subroutine writev(par)
      real par(x,y)
      real var(x,y)

      var = sqrt(par)
      open (unit=1,file="~/destination",form="unformatted")
      write (1,*)var
      close(1)
      end

从我可以解释的,错误消息告诉我数据已格式化,但我不明白为什么会这样,因为我没有要求它格式化它除了指定它是真正的类型。有什么明显的东西可以让我在这里失踪吗?

完整的痕迹是;

  

forrtl:severe(257):格式化I / O到单元打开以进行无格式传输,单元1,文件   〜/目标图像
  PC常规线源
  genie.exe 00000000008362B6未知未知   未知genie.exe 00000000008354B6未知
  未知未知genie.exe 00000000007E2612未知
  未知未知genie.exe 0000000000796881未知
  未知未知genie.exe 000000000079616E未知
  未知未知genie.exe 00000000007D373E未知
  未知未知genie.exe 0000000000467FF4未知
  未知未知genie.exe 000000000046F06F未知
  未知未知genie.exe 000000000043C793未知
  未知未知genie.exe 0000000000461D73未知
  未知未知genie.exe 0000000000403816未知
  未知未知libc.so.6 000000376901D9F4未知
  未知未知genie.exe 0000000000403729未知
  未知未知

     

真正的0m1.673s用户0m0.031s sys 0m0.023s错误:!!!!!!!!!!   错误处理!!!!!!!!!!

1 个答案:

答案 0 :(得分:2)

未格式化的I / O不需要/与格式说明符*冲突。使用

write (1) var

应该做的伎俩。有关详细信息,请参阅here

BTW:从不使用低于10的单位数字,它们可能具有特殊含义(例如,通常6STDOUT)。如果您的编译器支持它,请将opennewunit一起使用。