Fortran将字符串转换为数字

宙斯

我想有一个子程序,可以将数字字符串的内容转换为数字类型(int,real,double precision,real(real128))。

但是,尝试使用时出现错误Class(*)错误如下所示:

gfortran -o build/lib/larsa.o -c -ffree-form -g -J./build/lib lib/larsa.f
lib/larsa.f:1933.35:

 Read (s, frmt, iostat=ios) num
                               1
Error: Data transfer element at (1) cannot be polymorphic unless 
it is processed by a defined     input/output procedure
lib/larsa.f:1935.32:

 Read (s, *, iostat=ios) num
                            1
Error: Data transfer element at (1) cannot be polymorphic unless 
it is processed by a defined input/output procedure

这是我编写的子例程。

Subroutine converts_str_to_num  &
  (                             &
    s, num,                     &
    fmt, wrn                    &
  )

Character (len=*), Intent (in) :: s
Character (len=*), Intent (in), Optional :: fmt 

Class (*) :: num
Character (len=*), Intent (inout), Optional :: wrn 

Integer :: ios
Character (len=65) :: frmt

!!$ Reads contents of s and puts value in i.

If (Present (fmt)) Then
  frmt = "(" // Trim (fmt) //  ")"
  Read (s, frmt, iostat=ios) num
Else
  Read (s, *, iostat=ios) num
End If

End Subroutine converts_str_to_num
法国斯卡鲁斯

为了整理评论,我将提供一个答案。

错误消息很明显:输入/输出列表中不能有多态变量,除非该列表由定义的输入/输出处理。在Fortran 2008中为9.6.3.5。class(*) num是(无限)多态的。

现在,对于多态派生类型,您可以定义这样一个定义的输入/输出过程,但这很繁琐,并且gfortran当然还不支持该概念。另外,您不能对内部类型执行此操作。这些因素意味着您必须处理输入列表中的非多态变量。

当然,可以使用泛型来避免多态性,但是替代方法(因为它适用于所有多态性)select type为简单起见,请忽略列表导向和显式格式的情况:

select type (assoc => num)
type is (int)
   Read (s, *, iostat=ios) assoc
type is (real)
   ...
type is (...)
class default
   error stop "Oh noes!"
end select

我在选择类型中使用了关联名称来解决您的困惑的一部分。如果你刚做完

select type(num)
type is (int)
  Read (s, *, iostat=ios) num
end select

认为“现在使用num很好:为什么?” 这是因为num内部构造与num外部构造不同至关重要的是,它不是多态的,而是与匹配的确切类型type is

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Fortran将字符串转换为数字

来自分类Dev

将数字转换为字符串

来自分类Dev

将数字转换为字符串

来自分类Dev

将字符串转换为数字

来自分类Dev

将数字转换为字符串

来自分类Dev

将字符串转换为数字

来自分类Dev

Mongodb:将数字字符串转换为数字

来自分类Dev

将包含数字的字符串转换为数字向量

来自分类Dev

MySQL自动将字符串转换/转换为数字?

来自分类Dev

Fortran-将具有未知字符的字符串转换为子字符串

来自分类Dev

将字符串转换为修改后的数字

来自分类Dev

将json字符串值转换为数字

来自分类Dev

将字符串答案转换为数字。

来自分类Dev

将结构字段从字符串转换为数字

来自分类Dev

将非数字字符串转换为整数?

来自分类Dev

将字典转换为url参数字符串?

来自分类常见问题

将字符串转换为数字node.js

来自分类Dev

使用希伯来字母将数字转换为字符串

来自分类Dev

将字符串转换为可排序的数字

来自分类Dev

将字符串输出转换为数字值

来自分类Dev

Lisp:将数字转换为字符串

来自分类Dev

如何将货币字符串转换为数字

来自分类Dev

Elasticsearch将字符串转换为数字

来自分类Dev

Java程序将数字转换为字符串

来自分类Dev

Matlab脚本(将字符串转换为数字)

来自分类Dev

防止JAXB将字符串转换为数字(JSON)

来自分类Dev

使用constexpr将数字转换为字符串文字

来自分类Dev

SQL将数字字符串转换为int

来自分类Dev

如何将字符串运算转换为数字?