我想在Fortran中创建一个包含字符串数组的类型,而无需显式分配长度,这样我就可以从函数中返回它。
以下是我的类型:
begin program.
import spssdata
majors = []
for case in spssdata.Spssdata('mq1'):
major = case[0]
if major not in majors:
majors.append(major)
print majors
end program.
以下是函数的签名:
'None'
以下是我尝试设置结果的地方:
type returnArr
Character (*), dimension(4) :: array
end type returnArr
但是我得到的只是以下错误:
type(returnArr) FUNCTION process(arr, mean, stdDev) result(j)
如何声明类型,以使字符串的长度可以不同?
答案 0 :(得分:2)
派生类型的字符组件可以具有明确的长度,也可以具有其长度 deferred 。后者是一种如何(通过多种方式)改变其值的方法。还必须在派生类型的数组中允许不同长度的灵活性。
但是,使用len=*
并不是说“递延长度”(这是“假定长度”)的正确方法。相反,您可以使用len=:
并使组件可分配(或指针):
type returnArr
Character (:), allocatable :: char
end type returnArr
然后可能有一个returnArr
对象的数组:
function process(arr, mean, stdDev) result(j)
type(returnArr) :: j(4)
end function
诸如以下的分配
j(1)%char = "Test"
然后依靠组件char
的自动分配。
请注意,现在函数结果是该容器类型的数组。我们不能做
function process(arr, mean, stdDev) result(j)
character(:), allocatable :: j(:)
end function
并将j(1)
分配给与j(2)
(例如,等)不同的长度。
类似地
type returnArr
Character (:), allocatable :: char(:)
end type returnArr
不允许这些char
组成元素具有不同的长度。