Fortran:将每列添加到文件中

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项组成 第一次运行脚本时,我

该代码由一个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
项组成

第一次运行脚本时,我得到了一个很好的输出,可以将其作为.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或任何其他语言。您必须重新写入整个文件,或者使用占位符空格初始化文件并使用直接访问。看见