Fortran 如何在编辑描述符中自动调整字符串长度?

Fortran 如何在编辑描述符中自动调整字符串长度?,fortran,fortran90,Fortran,Fortran90,我正在尝试使用以下命令在fortran中编写字符串文件名: WRITE(FILENAME,'(A27,I3.3,A1,I3.3,A3)') NAME,MYPR,'_',IBL,'.nc' 其中NAME是一个长度可变的字符串,MYPR和IBL是整数。 我正在搜索一个可以动态编写格式的解决方案: '(A27,I3.3,A1,I3.3,A3)', 其中A27将根据名称的长度而变化。我试过单独使用'A',但这导致了一个错误。我不确定这里有什么可能,因为许多文本甚至没有涵盖类似的问题。 非常感谢您的

我正在尝试使用以下命令在fortran中编写字符串文件名:

WRITE(FILENAME,'(A27,I3.3,A1,I3.3,A3)') NAME,MYPR,'_',IBL,'.nc'
其中NAME是一个长度可变的字符串,
MYPR
IBL
是整数。 我正在搜索一个可以动态编写格式的解决方案:

'(A27,I3.3,A1,I3.3,A3)', 
其中
A27
将根据
名称的长度而变化。我试过单独使用
'A'
,但这导致了一个错误。我不确定这里有什么可能,因为许多文本甚至没有涵盖类似的问题。
非常感谢您的建议。

显而易见的解决方案是使用格式字符串
'(A,I3.3,A1,I3.3,A3)
,即仅使用
A
作为名称,并让编译器选择正确的长度。这对我来说非常有效

正如@agentp所建议的,您可能会看到由于字符串中的空格而导致的问题。这可以通过使用
trim(name)
去除尾随空格来解决,甚至可以使用
trim(adjustl(name))
去除前导空格和尾随空格。此解决方案在下面的子例程
print1()
中给出

另一个选项是动态生成格式字符串——毕竟,这也是一个字符串。这相当麻烦,而且在您的情况下是一种过激的行为-请参阅
print2()

输出:

./a.out 
Testfile001_002.nc
Testfile001_002.nc

我曾单独尝试过“A”,但这导致了一个错误。它导致了什么错误?它当然不会在运行时引发编译错误或崩溃。我认为您需要展示更多您自己的代码,以便我们能够发现您的错误并帮助修复它们。我同意@HighPerformanceMark,仅使用
a
而不是
A27
非常适合我。另一种可能是在(字符)变量中构造格式字符串并使用它。然而,在这种情况下,这将是一种过火的做法。我正在寻找一种可以动态编写格式的解决方案:不,你可能不会像@AlexanderVogt已经建议的那样寻找这种格式。如果你是,你会(a)意识到格式字符串只是一个字符串,你当然可以在执行过程中编写代码来编写它;(b) 但随后您会发现,在执行期间编写格式字符串是一件非常麻烦的事情,您本可以避免这些麻烦。回答我在前面的评论中提出的问题-
A
单独导致了什么错误?
trim(name)
使用纯
A
格式可能就是您想要的。谢谢您的回答。我在fortran中做了很多工作,但在更复杂的I/O方面做得不多。例如,感谢对文本的编辑,以及对全文的启发:-)
./a.out 
Testfile001_002.nc
Testfile001_002.nc