转义引号并删除fortran中的双换行符

Pet*_*ter 4 fortran fortran90

我正在尝试在Fortran90中输出一个简单的错误消息,如下所示:

error: failed to read '<file>'
Run Code Online (Sandbox Code Playgroud)

但是我不知道如何产生单引号,将其转义会导致编译错误。我尝试了以下方法:

write(*, fmt="('error: failed to read: \'', a, '\'')") arg
Run Code Online (Sandbox Code Playgroud)

另外,如果我打印的消息没有它们:

write(*, fmt="('error: failed to read: ', a)") file
Run Code Online (Sandbox Code Playgroud)

在命令行上会产生一个额外的换行符(即总共两个)。我arg通过执行获得call getarg(1, arg),也许与它有关。

这是一个最小的工作示例,它演示了换行问题:

program foo                                                        
    character(len=100) :: arg

    call getarg(1, arg)

    write(*, fmt="('error: failed to read: ', a)") arg
end program foo
Run Code Online (Sandbox Code Playgroud)

如果有人可以将我定向到更详细地说明这一点的资源,那我会发现fortran中的格式化输出非常不直观。

Vla*_*r F 5

我认为最好不要像在C语言中那样将打印的字符串输入格式,而是将它们放入输出列表中。

我还建议trim(arg)在打印文件名时对其进行修剪,以免在90个无用的尾随空白周围打印。

program foo
    implicit none                                                        
    character(len=100) :: arg

    call getarg(1, arg)

    write(*, '(*(a))') "error: failed to read: '", trim(arg), "'"
end program foo
Run Code Online (Sandbox Code Playgroud)

这样一来,您无需在引号的外层引用格式字符串本身。

即使在任何字符串中,您都可以重复引号将其放入字符串中,即“''(请参阅fortran中双引号和单引号之间的区别?

顺便说一句,标准的Fortran 2003具有子例程GET_COMMAND_ARGUMENT而不是GETARG