在由Fortran程序

时间:2017-11-17 20:34:42

标签: windows macos fortran text-files gfortran

作为一个用新的Fortran标准编写的大型程序的一部分,我有兴趣在一个文件上写一些文本,这个文件将被我无法控制的另一个程序读取。 很久以前,当我学习Fortran时,格式语句生成的输出记录应以LF(换行)开头,以CR(回车)结束。这意味着每个输出记录应该由序列CRLF分隔。

令我惊讶的是,我发现除非我在Windows计算机上编译并运行程序,否则这似乎不再是真的。当我在Mac上编译并运行我的程序时,输出记录由单个LF分隔。我知道这是一个Linux标准,但我想我认为Fortran程序的输出不应该依赖于操作系统。

这样做的结果是,当我在Windows上生成输出时,我的输出文件可以被其他程序读取(仅存在于Windows上),而当我在Mac上生成相同的输出时,它会失败。 我不知道其他程序如何读取文件,但我认为它是标准的Fortran读取。

我还使用" diff"比较了我在Windows和Mac上的输出文件。这表明所有行都不同。然而" diff -w"表示文件相同。

如果我在Mac或Windows上生成文件,我希望能够生成可由其他程序独立读取的输出。我知道我可以使用#ifdef之类的东西在编译时检查操作系统,但我想知道是否有其他方法,Fortran写入中是否有一些选项?我知道有很多新的东西线" noadvance"等任何迫使" CRLF"记录分隔符?

我在Windows上使用GNU Fortran版本5.2,在Mac上使用的似乎是版本7.2

1 个答案:

答案 0 :(得分:0)

根据documentation,gfortran允许test1 = open("test1.txt")语句的特殊标志,称为OPEN,如下所示:

CARRIAGECONTROL

仅当使用 -fdec 开关编译代码时,才支持此选项。输出文件的内容如下:

program prg

    integer :: u

    open (newunit = u, file = 'test.txt', carriagecontrol = 'fortran')

    write (u, '(A,I2)') '-', 12
    write (u, '(A,I2)') '-', 34

    close (u)

end program prg

这正是您描述的格式。上面代码中I / O列表中的减号由编译器运行时库使用,并用于重新定义输出格式。 (已使用gfortran 9.2进行了测试。)