fcode 发表于 2018-4-17 22:04 非常感谢您的意见,我已经做出修改 |
其实你可以这样定义结构体 [Fortran] 纯文本查看 复制代码 module typedef type para character(len=2) line integer :: column,addcolumn character(len=3) stateindex character(len=1) colon character(len=1) pressure character(len=1) commaa character(len=15) variables real(kind=8) :: porosity,Numcon1,Numcon2,Numcon3,Numcon4 end type end module program main use typedef implicit none integer,parameter :: fileid = 3 ! number of save.txt integer,parameter :: fileids = 4 ! number of INCON.txt integer,parameter :: linenum = 2 ! the number of lines,can change integer,parameter :: columnnum = 150 ! the number of column,can change character(len=80) title type(para) :: s(linenum) ! save the parameters of save.txt type(para) :: a(columnnum) ! save the parameters of columnnum integer i,j,error,truecolumn truecolumn=5 open( fileid,file="save.txt",status="old",iostat=error) if(error/=0)then write(*,*)"open save.txt fail." stop end if OPEN(UNIT=fileids,FILE='INCON.txt',FORM='FORMATTED',STATUS='NEW',IOSTAT=error) if(error/=0) then write(*,*)"open elem_elem.txt fail" stop end if read(fileid,*) title write(fileids,"(A80)") title do i=1,linenum read(fileid,FMT = 5001) s(i)%line,s(i)%column,s(i)%porosity,s(i)%stateindex,s(i)%colon,s(i)%pressure,s(i)%commaa,s(i)%variables,s(i)%Numcon1,s(i)%Numcon2,s(i)%Numcon3,s(i)%Numcon4 write(fileids,FMT=5001) s(i)%line,s(i)%column,s(i)%porosity,s(i)%stateindex,s(i)%colon,s(i)%pressure,s(i)%commaa,s(i)%variables,s(i)%Numcon1,s(i)%Numcon2,s(i)%Numcon3,s(i)%Numcon4 a(i)%addcolumn = s(i)%column a(i)%line = s(i)%line a(i)%porosity = s(i)%porosity a(i)%stateindex = s(i)%stateindex a(i)%colon = s(i)%colon a(i)%pressure = s(i)%pressure a(i)%commaa = s(i)%commaa a(i)%variables = s(i)%variables a(i)%Numcon1 = s(i)%Numcon1 a(i)%Numcon2 = s(i)%Numcon2 a(i)%Numcon3 = s(i)%Numcon3 a(i)%Numcon4 = s(i)%Numcon4 do j=1,truecolumn a(j)%addcolumn=a(j)%addcolumn+j write(fileids,FMT=5001) a(i)%line,a(j)%addcolumn,a(i)%porosity,a(i)%stateindex,a(i)%colon,a(i)%pressure,a(i)%commaa,a(i)%variables,a(i)%Numcon1,a(i)%Numcon2,a(i)%Numcon3,a(i)%Numcon4 end do end do ! do i=1,linenum ! write(fileids,FMT=5001) s(i)%line,s(i)%column,s(i)%porosity,s(i)%stateindex,s(i)%colon,s(i)%pressure,s(i)%commaa,s(i)%variables,s(i)%Numcon1,s(i)%Numcon2,s(i)%Numcon3,s(i)%Numcon4 ! end do ! stop 5001 FORMAT(A2,A3,11X,ES14.8,2X,A3,A1,1X,A1,A1,5X,A15/1X,ES19.13,1X,ES19.13,1X,ES19.13,1X,ES19.13) end program 这样有个好处,就是不再需要写 read(fileid,FMT = 5001) s(i)%line,s(i)%column,s(i)%porosity,s(i)%stateindex,s(i)%colon,s(i)%pressure,s(i)%commaa,s(i)%variables,s(i)%Numcon1,s(i)%Numcon2,s(i)%Numcon3,s(i)%Numcon4 而可以简单的写成 read(fileid,5001) s(i) 当然你还要调整 5001 format 的顺序。 非常方便 |
我自己解决了我的问题,下面把我修改的程序贴出来 [Fortran] 纯文本查看 复制代码 type para character(len=3) line integer :: column real(8) :: porosity character(len=3) stateindex character(len=1) colon character(len=1) pressure character(len=1) commaa character(len=15) variables real(kind=8) :: Numcon(4) end type |
vvt 发表于 2018-4-17 01:08 好的,我已经修复了帖子 |
对于大段的代码,请直接复制粘贴,不截图。 对于输入文件也是一样。 截图不能复制粘贴,对于想要帮助你的人来说,需要照着图片敲一遍代码,才能帮助你测试。这是很复杂的一件事情。 (请注意,通过眼睛看出错误,是很难的) |
捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )
GMT+8, 2025-4-15 01:44