fcode 发表于 2023-4-25 17:01 好的谢谢了呀我明白了 |
lumlngz 发表于 2023-4-25 16:59 因为你每次都 close 了。每次循环,都会执行13行的close语句。 一个通道号 close 之后是可以重复使用的。没有 close 的话不能再次使用。 |
kyra 发表于 2023-4-25 08:30 okok成功了谢谢版主,但是我还有点问题,为什么11、12行代码里可以直接打开、写入文件30而没有出现重复,是因为他们在不同的文件夹里面嘛 |
非必要,不要用 formatted direct 这种读取方式。 如果非要用,一定要确保每行长度一致,recl 的设置非常关键。有些编译器还要考虑 CR LF 换行符号。 并且, write(s,*,rec=i) name 这里 rec = i 似乎有点问题。 以下代码可供参考 [Fortran] 纯文本查看 复制代码 program main implicit none integer::num,i,s=30 character(10)::dirname character(10)::filename character(10)::name real::a ,b ,c ,d open(10,file='111.txt',form='formatted',access='direct',recl=26) do i=1,20 read(10,*,rec=i,iostat=num)a ,b ,c ,d ,name if (num /= 0) exit write(dirname,'(A10)')name write(filename,'(A10,".txt")')name call system("mkdir "//dirname) open(s,file=trim(dirname)//'/'//filename,form='formatted',access='direct',recl=26) write(s,*,rec=i)name close(s) s=s+1 enddo endprogram |
[Fortran] 纯文本查看 复制代码 program main implicit none integer::num character(10)::name real::a ,b ,c ,d open(10,file='111.txt') do read(10,*,iostat=num)a ,b ,c ,d ,name if (num /= 0) exit call system("mkdir "//name) open(30,file=trim(name)//'/'//trim(name)//'.txt') write(30,*)name close(30) enddo close(10) end program main |
捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )
GMT+8, 2024-11-23 10:38