我想从文本文件中读取数字。可以是标量或数组。
所以要么我调用real, dimension(2) :: test
call self%ReadRealToVariable('(2F10.0)',test)
或
real :: test
call self%ReadRealToVariable('(F10.0)',test)
导入函数看起来像
subroutine ReadRealToVariable(self,Format,VarOut)
implicit none
! Declaring Part
class(FileImporter) :: self
real, dimension(:), intent(out) :: VarOut
character(len=*), intent(in) :: Format
real, dimension(size(VarOut)) :: Value
! Executing Part
call self%ReadValueToVariable(Format,Value)
end subroutine ReadRealToVariable
现在的问题是,当我尝试导入一个标量时,我得到标量和秩(1)之间的维度不匹配。我完全理解为什么会出现这个问题。现在的问题是如何处理它:
是否有一种方法可以灵活地将变量分配给标量或数组?
或者我应该简单地将所有标量初始化为
real, dimension(1) :: test
?
为了有一个问题的答案,人们可以看到…
1)不,单个例程不能在传递标量时分配标量,也不能在传递数组时分配数组。可以将不同的例程封装在一个泛型接口后面,并使它看起来就好像单个过程按照OP的要求运行一样。这可能已经足够好了。OP似乎已经弄明白了这一点,而且在SO上可能还有其他关于泛型接口的问题,所以我不会在这里写更多关于这个主题的内容。
2)为了编写从文件中读取值的例程,当然可以将标量视为大小为1的第1级数组。我不确定是否有人想要在整个代码库中传播它。另一方面,我可以看到在某些情况下,大小为1的排名为1的数组与大小为0的数组一样有用,例如在没有复杂条件的情况下处理边缘情况。