fortran在许多文件中拆分数据并进行一些处理

时间:2017-07-08 19:11:06

标签: split fortran

我想拆分我的文本文件并将其保存在许多文件中,并为每个文件执行一些计算并获得结果。 我写了这段代码,但它只在一个文件中编码。 我很高兴有人帮助我。

rogram split
  implicit none
  integer:: n1,i,k,j
  parameter (n1=52017)
  real*8::bjd1,bjd(n1),phase(n1),flux(n1),errflux(n1),bjd2,sumation,ave
  open (1,file="myfile.txt")
  do i=1,n1
            read(1,*)  bjd(i),phase(i),flux(i),errflux(i)
            enddo
    close(1)
 bjd1=(bjd(1)+4)
 bjd2=bjd(1)
 j=0

 do k=1,n1
    if (bjd(k).le.bjd1) then
        write(2,*) bjd(k),phase(k),flux(k),errflux(k)
        j=j+1
        else
             write(2,*)'solution'
             bjd1=bjd(k)+4
             sumation=bjd2+bjd(k-1)
             ave=sumation/2
             bjd2=bjd(j)
             write(3,*)j,ave
     end if
 end do
end program

2 个答案:

答案 0 :(得分:0)

我希望强烈阻止您使用小于10的单位数。根据您的编译器和系统,其中一些数字用于stdin,stdout和errout。

我要做的是声明一个整数变量,例如out_unit,然后以这种方式使用它:

integer :: out_unit
...
open(newunit=out_unit, file=...)
...
write(out_unit, *) vars
...
close(out_unit)

如果你想在输出文件之间循环,为什么不使用这样的东西:

integer :: out_unit
...
open(newunit=out_unit, file=<first file>, ...)
do ...
    ...
    write(out_unit, ...) ...
    if (<cycle trigger>) then
        close(out_unit)
        open(newunit=out_unit, file=...)
    end if
    ...
end do
...
close(out_unit)

已编辑添加

正如@ s8129指出的那样,newunit参数是相当新的,而大多数 Fortran编译器现在都理解它,并非所有人都这样做。如果你没有,你可以用老式的方式做到这一点&#39;:

integer, parameter :: out_unit = 101   ! Some unique number >10

然后使用newunit=out_unit

替换open语句中的每个unit=out_unit

答案 1 :(得分:0)

I can write this code and get my results
enter code here`
    j=1
       close(1)
         x=bjd(1)+0.25
        n=11
    write(myfilename,"(a,i0,a)") "myfilename",n,".txt"
 open (n,file=myfilename)
 do k=j,50
   print*,x,j,n
    if (bjd(k).le.x) then
        print*,bjd(k)
       write(n,*) bjd(k),phase(k),flux(k),errflux(k)
           j=j+1
           else
            close(n)
           n=n+1
           x=(bjd(j)+0.25)
             end if
 end do
end program