3

我只想将带有可变行的两列文本文件读入数组。文本文件的第一列是以秒为单位的时间,第二列是温度。像这样:

    1.1 10
    2.1 20
    3.2 30
    4.2 40
    5.3 50
    6.3 60
    7.4 70

以下是我编写的代码:

模块 myData
    输入 line_info
        即时的
        真实的::温度
    端型

    类型数据链路
        类型(line_info)::time_temp
        类型(数据链路),指针::下一个
    端型

    类型(line_info),可分配 :: FileInfoArr(:)
端模块

程序控制台1
    使用我的数据
    隐式无

    !变量
    类型(line_info),可分配 :: time_temp_arr(:)
    !real,allocatable :: File2Arr(:)
    字符 (len=80) :: FileFullName="C:\t.txt"       
    调用 File2Arr(FileFullName,time_temp_arr)   



结束程序控制台1

子程序 File2Arr(FileFullName,InfoArray)
    使用我的数据
    字符 (len=80) :: FileFullName
    类型(line_info),可分配的 :: InfoArray(:)
    类型(数据链路),指针 :: 头
    类型(数据链路),指针 :: p
    整数误差,大小,我


    逻辑活着  
    !检查文件是否存在
    查询(文件=文件全名,存在=活着)
    如果(活着==0)那么
        write(*,*) FileFullName, "不存在。"
        停止
    万一

    !使用指针读取文件   
    打开(10,文件=文件全名,状态=“旧”,iostat=错误)
    如果(错误/=0)那么
        write(*,*) "打开文件失败!"
        停止
    万一

    分配(头)
    无效(头%下一个)
    p=>头
    大小=0
    !read(10,"(A80)") tempstr
    做while(.true.)
        读取(10,fmt=*,iostat=error)p%time_temp
        如果(错误/=0)退出
        尺寸=尺寸+1
        分配(p%next,stat=error)!添加下一行
        如果(错误/=0)那么
            写(*,*)“内存不足!”
            停止
        万一      
        p=>p%下一个
        无效(p%next)
    结束做
    !将链接信息保存到数组中
    分配(信息数组(大小))
    p=>头
    我=0
    做while(关联(p%next))
      我=我+1
      InfoArray(i)=p%time_temp
      p=>p%下一个
      !write(*,*) FileInfoArr(i)%time, FileInfoArr(i)%temp
    结束做

结束子程序

当我编译它时,我得到了这个:

错误 #8055:该过程有一个虚拟参数,该参数具有 ALLOCATABLE、ASYNCHRONOUS、OPTIONAL、POINTER、TARGET、VALUE 或 VOLATILE 属性。原始源中缺少必需的显式接口。[TIME_TEMP_ARR]

有关如何解决此错误的任何想法,感谢您的帮助。

4

2 回答 2

3

将您的子例程File2Arr放入模块MyData中(并删除该use mydata子例程中的行)。它为我编译并运行。

于 2013-06-02T10:31:51.580 回答
1

除了将您的子程序添加File2Arr到您的模块之外MyData,您也可以使用关键字将它直接放入您的程序中CONTAINS(在这里您也可以删除use mydata子程序中的行)。

于 2013-06-04T14:17:38.137 回答