String 像解析文件一样解析Fortran字符串

String 像解析文件一样解析Fortran字符串,string,fortran,String,Fortran,我想将一个字符串从C传递到Fortran,然后像读取文件一样逐行处理它。这可能吗 示例字符串-包含换行符 File description: this file contains stuff 3 Values 1 Description 2 Another description 3 More text 然后,我想逐行解析字符串,就像一个文件一样。与此类似: subroutine READ_STR(str, len) character str(len),d

我想将一个字符串从C传递到Fortran,然后像读取文件一样逐行处理它。这可能吗

示例字符串-包含换行符

File description: this file contains stuff
3 Values
  1     Description
  2     Another description
  3     More text
然后,我想逐行解析字符串,就像一个文件一样。与此类似:

subroutine READ_STR(str, len)
character str(len),desc*70

read(str,'(a)') desc
read(str,*) n
do 10 i=1,n
read(str,*) parm(i)
10    continue
没有明显的“手动”干预。有几个问题:

  • 换行符在内部文件中没有特殊意义。内部文件中的记录对应于数组中的元素。您可能需要首先手动将字符标量预处理到数组中,或者使用跳过换行符的单个读取

  • 如果将字符串处理为数组,则内部文件不会在父读取语句之间保持文件位置。您需要自己手动跟踪当前记录,或者使用访问多个记录的单个READ语句处理整个数组


如果您有可变宽度字段,那么编写一个格式规范以在一次读取中处理所有内容可能会有问题,尽管这取决于输入的详细信息。

最明显的建议是用C语言写入文件,然后用Fortran:-)读取。假设Unix是一个更有效的选择,一个普通文件可以使用FIFO调用
mkfifo()
在C中,在Fortran中,您可以正常打开生成的特殊文件。是的,我正在考虑使用临时文件(必须是跨平台的)。如果您将字符串传递给Fortran,并从那里将其写入一个临时文件,我相信这也应该是跨平台兼容的。然后你就可以像往常一样从那个临时文件单元读回。听起来很复杂。。。关于上面的示例输入,您看到了解析这个字符串的方法吗?只需要得到第一行的描述和其余行的第一个整数。或者不能在换行符上进行标记化?使用显式格式规范,不能在任何字符上进行标记化-显式格式的输入本质上是基于字符位置的。列表定向格式具有值分隔符的概念,但它[不一定]包含换行符(换行符不在Fortran字符集中)。列表导向格式还有许多其他可能使其不适用的功能。