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