【问题标题】:Get file unit by name and vice versa in Fortran在 Fortran 中按名称获取文件单元,反之亦然
【发布时间】:2014-11-19 03:49:03
【问题描述】:

在 Fortran 90 中有没有办法按名称获取文件单元,按单元编号获取文件名?我知道这会很昂贵,但是我有很多文件名,我希望在创建它们之后能够在子例程中重新访问它们。..

【问题讨论】:

  • 因为答案两者兼而有之,我相信在问题中同时拥有两者是有用的。如果您不同意,您可以回滚编辑。
  • 我觉得不错,谢谢!

标签: string io fortran


【解决方案1】:

为了获取文件信息,您必须使用INQUIRE 语句。

UNITFILE 都是 INQUIRE 语句的有效 input 选项,但我不确定它们是否可以用于输出(例如,gfortran 7.4.0 会抱怨INQUIRE statement at (1) cannot contain both FILE and UNIT specifiers)。

因此,要从单元号获取文件名信息,请使用NAME,例如:

inquire(unit=12, opened=openedq, NAME=name_of_file)

获取单元号信息,上例有效:

inquire(file='my_file', opened=openedq, NUMBER=file_unit)

【讨论】:

    【解决方案2】:

    类似的命令

    inquire(unit=12, opened=openedq, file=name_of_file)
    

    将连接到单元 12 的文件的名称返回给字符变量name_of_file。如果没有文件连接到单元opened将返回false,否则返回true。该命令还接受各种其他可选参数。

    要获取已附加文件的单元号,请使用前面的变体,如下所示

    inquire(file='my_favourite_file.nuts', number=unknown_unit_number, opened=openedq)
    

    参考您的编译器文档应该解释inquire 支持的所有变体。

    【讨论】:

    • 我不知道单元号是什么(在您的情况下为 12),但我知道我要打开和写入的文件的名称(在您的情况下为 name_of_file).. .我创建了一个临时整数来打开单元,但在离开子程序时丢失了它。有没有什么方法可以让我在没有原始单元号和文件名的情况下访问该文件?还是我必须保存单元号?...
    • 您必须保存单元号,或者按照 Mark 的建议使用 INQUIRE 重新获取。
    • 看起来像过时的答案。请参阅下面 Federico Perini 的答案
    猜你喜欢
    • 1970-01-01
    • 2010-10-09
    • 1970-01-01
    • 2013-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多