【问题标题】:Comma separators in FortranFortran 中的逗号分隔符
【发布时间】:2012-07-04 05:29:52
【问题描述】:

我在使用 Fortran 时遇到了以下问题:例如,在从具有 fmt=* 的数据文件中读取字符数组或任何实际列表时,非引号间的空格和逗号本身都被视为分隔符对于数组/列表中的元素。逗号充当分隔符这一事实对我来说是个大问题。

所以问题是:您是否知道 Fortran 中允许将输入文件中的逗号视为字符而不是分隔符的任何语义选项或编译指令, 唯一的分隔符是空格?作为一个具体的例子,我希望在阅读这样的记录时:

x,y,z

与:

read (7,*) adummy

将导致adummy(一个标量字符变量)获得值x,y,z 而不是x

欢迎任何帮助。

【问题讨论】:

    标签: io fortran


    【解决方案1】:

    解决方案是指定格式以匹配您的数据记录,即在指定格式时使用字符数据描述符:

    read(7,fmt='(A)')adummy
    

    将导致adummy 具有值x,y,z,假设它是一个足够长的变量。

    但是这个方法也不会把空格当作分隔符,所以如果你想把逗号当作字符串来读,但有空格当作分隔符,通常的实现方法是将整条记录读入字符变量并进行分割之后分成单独的变量。

    【讨论】:

    • 谢谢 IRO 机器人。格式化的读取确实适用于我作为示例给出的简单案例,但正如您所指出的,它不适用于读取记录:x,y,z
    • @user1499420 我不确定你的意思 - 你能在你的问题中澄清一下吗?究竟什么不起作用?
    • (完整评论)谢谢 IRO-bot。格式化读取确实适用于我作为示例给出的简单情况,但正如您所指出的,它不起作用,例如,对于读取记录:x,y,z u,v,w into adummy 如果这是一个字符aray of shape (/2/),这更像是我现实生活中的问题。此外,通过输入文件中的不同记录读取数组的 fmt=* 功能将丢失。在我的问题中,数据有时可能全部位于同一记录/行或连续记录中。我试图避免编写正确的解析例程,而是使用 fmt=* 的功能
    • @user1499420 我的观点是为您的数据编写解析器将是您的最佳选择。如果您坚持使用默认格式输入,可能会有一些非标准的编译器选项提供此功能,但我不知道它们,因此您需要查看编译器的文档。
    • 谢谢 IRO-bot,这也是我的理解,但我想了解专家的意见。我认为选择性地允许将 fmt=* 的分隔符限制为仅空白对于未来的 Fortran 分期付款将是一个非常好的主意。在这种情况下可能会有很大帮助,我想这并不罕见。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    • 2011-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多