【问题标题】:Can the input to a FORTRAN 'READ' statement be taken from a string literal?FORTRAN 'READ' 语句的输入可以取自字符串文字吗?
【发布时间】:2011-02-03 00:30:53
【问题描述】:

为了开发一些测试,如果我可以使用源中的字符串文字而不是外部文件或标准输入来输入 FORTRAN READ 语句,那将会很有帮助。 Python 有一个StringIO 模块,可用于从字符串文字生成类似文件的对象,在 FORTRAN 中是否有类似的可能?

      MAKEFAKEDEVICE(N, 'Some string literal here')
      READ(N, '(A)'), VAR1

【问题讨论】:

    标签: io fortran


    【解决方案1】:

    您可以使用内部读取或写入(即,从/到 CHARACTER 类型的变量的 IO 与常规 IO 的文件):

    !演示内部读/写 程序启动 隐式无 字符(len=20) :: a, b a = "你好,世界!" !用 A 格式将 a 读入 b 读(a, '(A)') b 打印 *, b !应该打印“hello world!” !现在写入 b 写(b,*)“我打过招呼!” 打印 *, b !从文字读入 b !read("嗯,你好!", '(A)') b !print *, b 结束程序 intio

    如果你取消注释你得到的最后两行

    intread.f90:13.7: 阅读(“好吧,你好!”,'(A)')b 1 错误: (1) 处的 UNIT 规范必须是 INTEGER 表达式或 CHARACTER 变量

    所以不,你不能从文字中读取。

    【讨论】:

    • 太棒了,太棒了,这应该比我猜的创建临时文件要快。
    【解决方案2】:

    我刚刚看了下GCC项目使用的测试,好像下面是有效的,

          OPEN(10, STATUS='scratch')
          WRITE(10, '(A)'), 'Some literal'
          REWIND(10)
          READ(10, '(A)') VAR1

    【讨论】:

    • 这是对临时文件的常规 I/O,这似乎不是您想要的?
    【解决方案3】:

    我真的不知道(我现在开始思考还为时过早 :) 这是否有任何帮助,但您可以尝试在您的帮助中搜索“内部读取”。

    我不知道有什么方法可以读取源代码的一部分,但是可以通过

    之类的方式读取常规字符串
    string = 'some literal'  
    read(va1, (a))string  
    

    http://www.megasolutions.net/fortran/internal-read-of-character-array_F-ifort-differences-77847.aspx

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-10
      • 1970-01-01
      • 1970-01-01
      • 2017-05-19
      • 2010-12-30
      • 2017-03-31
      相关资源
      最近更新 更多