【问题标题】:Delimit Fortran strings using numbers使用数字分隔 Fortran 字符串
【发布时间】:2017-06-12 16:55:09
【问题描述】:

我有一个包含字母和数字的输入文件,我想用 Fortran 90/95 中的数字进行分隔。输入文件如下所示:

AAAA (spaces) 123BBBB (spaces) 4CCCC (spaces) 5DDDD (spaces) -6EEEE

如此等等。我希望空格后的数字与空格前的四个字母一起使用。我在这里遇到的问题是数字可以是一位、两位、三位或四位数字,也可以有负号。我不确定如何在 Fortran 中自动定界以将适当的数字转换为正确的字母。

到目前为止,我只编写了一个基本上复制输入文件并将其写入输出文件的脚本。我想先完成此操作,然后再尝试按上述方式进行分隔。

或者,我可以尝试在 Python 中进行定界(如果在 Python 中更容易的话),并从 Fortran 程序中调用 Python 定界脚本。

【问题讨论】:

    标签: fortran delimiter fortran90 fortran95


    【解决方案1】:

    Fortran 具有 SCAN 和 VERIFY 内在函数,可让您在指定字符集中(或不在)中的第一个(或可选的最后一个)字符的字符串中找到位置。您的示例格式错误,因为 EEEE 之后没有数字,但我现在将忽略它。

    我处理这个问题的方法是保留一个位置值,使用 INDEX 来定位下一个空白,它告诉我从当前位置有多少个字母。然后我会使用 VERIFY 和一组“-0123456789”来识别下一个非数字。这告诉我下一个数字是什么。我会使用该子字符串中的列表导向 READ 来读取数字。重复直到字符串结束。

    无疑还有其他方法可以做到这一点,但完全没有必要使用另一种语言。

    【讨论】:

    • 谢谢!我在不使用 SCAN 或 VERIFY 的情况下让它工作。我单独读取每个字符串的每个字符并转换为十进制,并在必要时插入分号。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    • 2011-12-26
    • 2015-12-28
    • 2019-08-23
    相关资源
    最近更新 更多