Fortran:将每列添加到文件中
该代码由一个do循环组成,只要运行就创建数据数组。我需要将这些数组作为新列添加到文件中 第一列是固定的(波长),第二列在第一次运行中生成:Fortran:将每列添加到文件中,fortran,output,multiple-columns,fortran90,Fortran,Output,Multiple Columns,Fortran90,该代码由一个do循环组成,只要运行就创建数据数组。我需要将这些数组作为新列添加到文件中 第一列是固定的(波长),第二列在第一次运行中生成: OPEN (unit=11,file=filename // '.csv') WRITE(11,'(i4,A1,f10.6)') (lambda(ii),tab,resv(ii), ii=1,nw) CLOSE(11) lambda是波长(4位),tab声明为char(9),resv是我的数据(浮动)。该数组由nw=2000项组成 第一次运行脚本时,我
OPEN (unit=11,file=filename // '.csv')
WRITE(11,'(i4,A1,f10.6)') (lambda(ii),tab,resv(ii), ii=1,nw)
CLOSE(11)
lambda是波长(4位),tab声明为char(9),resv是我的数据(浮动)。该数组由nw=2000
项组成
第一次运行脚本时,我得到了一个很好的输出,可以将其作为.csv加载到MS Excel中
但是,脚本将返回到循环的开头,计算新数据并将更改的“resv”项存储到新列中
但是当我走的时候
WRITE(11,'(T17,i4,A1,f10.6)') (lambda(ii),tab,resv(ii), ii=1,nw)
新数据确实存储在第17列中,但之前的所有数据都将被删除!
那么,我怎样才能告诉Fortran“添加”一个新列呢?试试这个变体。请查看addcolumn中的代码。限制是行的长度不能超过1024个字符。您可以根据需要增加阵列的大小
module mod_helper
integer, parameter:: AMAX = 10
integer, dimension(AMAX):: coldata
integer:: revision
contains
subroutine init
revision = 0
do ii = 1, AMAX
coldata(ii) = ii
end do
end subroutine init
subroutine increment(howmuch)
integer, intent(in):: howmuch
coldata = coldata + howmuch
end subroutine
subroutine addcolumn(csvname)
character*(*), intent(in) csvname
integer(kind=2):: status
integer:: prevlen
character(1024):: prev, oldname, newname
integer, parameter:: oldfile = 20, newfile = 30
write(oldname, "(A,I3.3,'.csv')") csvname, revision
revision = revision + 1
write(newname, "(A,I3.3,'.csv')") csvname, revision
if (revision .gt. 1) then
! Open the old file
open(oldfile, file=oldname, access="sequential", status="old")
end if
open(newfile, file=newname, access="sequential", status="new", action="write")
prev = ' '
do ii = 1, AMAX
if (revision .gt. 1) then
! read previous contents as a string
read(oldfile, "(A)") prev
prevlen = len(trim(prev))
else
prevlen = 1
end if
! write previous and new contents
write(newfile, "(A, I4, ',')") prev(1:prevlen), coldata(ii)
end do
! delete the previous file
if (revision .gt. 1) close(oldfile, status='delete')
close(newfile)
end subroutine
end module
program main
use mod_helper
call init
call addcolumn('col')
call increment(1)
call addcolumn('col')
call increment(20)
call addcolumn('col')
end program
无法从程序中编辑文件。使用旧数据重命名文件,读取旧文件并使用新旧数据写出新文件。完成后,删除旧文件。这似乎太类似于,请更新/细化原始问题。确保类似,同一代码有两个问题。最后一个问题的答案甚至是到达这里的必要条件。但这不是最终的解决办法。这是我真正的问题。@cup:同样的问题。当我读取旧数据时,我如何告诉fortran它应该为此使用两个新列?您根本无法写入现有文件中的新“列”。不适用于fortran或任何其他语言。您必须重新写入整个文件,或者使用占位符空格初始化文件并使用直接访问。看见