问题描述
我只想将带有可变行的两列文本文件读入数组.文本文件的第一列是以秒为单位的时间,第二列是温度.就像这样:
1.1 102.1 203.2 304.2 405.3 506.3 607.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:.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))我=我+1InfoArray(i)=p%time_tempp=>p%下一个!write(*,*) FileInfoArr(i)%time, FileInfoArr(i)%temp结束做结束子程序当我编译它时,我得到了这个:
错误 #8055:该过程有一个虚拟参数,该参数具有 ALLOCATABLE、ASYNCHRONOUS、OPTIONAL、POINTER、TARGET、VALUE 或 VOLATILE 属性.原始源中缺少必需的显式接口.[TIME_TEMP_ARR]
关于如何修复此错误的任何想法,感谢您的帮助.
把你的子程序 File2Arr
放到模块 MyData
里面(并去掉 use mydata该子程序内的代码>行).它编译了 &为我跑.
I just want to read a two-column text file with variable lines into an array.The first column of the text file is time in the unit of second, and the second is temperature. Just like this:
1.1 10
2.1 20
3.2 30
4.2 40
5.3 50
6.3 60
7.4 70
Following is the code I write:
module myData type line_info real :: time real :: temp end type type datalink type(line_info) :: time_temp type(datalink), pointer :: next end type type(line_info), allocatable :: FileInfoArr(:) end module program Console1 use myData implicit none ! Variables type(line_info),allocatable :: time_temp_arr(:) !real,allocatable :: File2Arr(:) character (len=80) :: FileFullName="C: .txt" call File2Arr(FileFullName,time_temp_arr) End Program Console1 Subroutine File2Arr(FileFullName,InfoArray) use myData character (len=80) :: FileFullName type(line_info),allocatable :: InfoArray(:) type(datalink), pointer :: head type(datalink), pointer :: p integer error,size,i logical alive ! check if file exists inquire(file=FileFullName, exist=alive) if(alive==0) then write(*,*) FileFullName, "doesn't exist." stop end if ! read file using pointer open(10, file=FileFullName, status="old", iostat=error) if(error/=0) then write(*,*) "open file fail!" stop end if allocate(head) nullify(head%next) p=>head size=0 !read(10,"(A80)") tempstr do while(.true.) read(10, fmt=*, iostat=error) p%time_temp if(error/=0) exit size=size+1 allocate(p%next, stat=error) ! add next line if(error/=0) then write(*,*) "Out of memory!" stop end if p=>p%next nullify(p%next) end do !save link info into an array allocate(InfoArray(size)) p=>head i=0 do while(associated(p%next)) i=i+1 InfoArray(i)=p%time_temp p=>p%next !write(*,*) FileInfoArr(i)%time, FileInfoArr(i)%temp end do End Subroutine
When I compile it, I got this :
Any idea on how to fix this error, thanks for any help.
Put your subroutine File2Arr
inside the module MyData
(and remove the use mydata
line inside that subroutine). It compiled & ran for me doing that.
这篇关于缺少子程序的显式接口的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!