FORTRAN'READ'语句的输入是否可以从字符串文字中获取?

时间:2011-02-03 00:30:53

标签: io fortran

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

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

3 个答案:

答案 0 :(得分:3)

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

!Demonstrate internal read/write                                                                                             
program intio                                                                                                                
  implicit none                                                                                                              
  character(len=20) :: a, b                                                                                                  
  a = "hello world!"                                                                                                         
  ! Read a into b with A format                                                                                              
  read(a, '(A)') b                                                                                                           
  print *, b  ! Should print "hello world!"                                                                                  
  ! Now write into b                                                                                                         
  write(b, *) "I said hello!"                                                                                                
  print *, b                                                                                                                 
  ! Read into b from literal                                                                                                 
  !read("Well, hello!", '(A)') b                                                                                             
  !print *, b                                                                                                                
end program intio                                                                                                            

如果您取消注释最后两行

intread.f90:13.7:

  read("Well, hello!", '(A)') b
       1
Error: UNIT specification at (1) must be an INTEGER expression or a CHARACTER variable

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

答案 1 :(得分:0)

我刚刚看了一下GCC项目使用的测试,看来以下是有效的,

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

答案 2 :(得分:0)

我真的不知道(现在开始思考太早了:)如果这有任何帮助,但你可以尝试在你的帮助中搜索“内部阅读”。

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

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

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