新人求助FOTRAN,急,谢谢好心人
我用 fortran 编个程序遇到很大的问题,希望哪位高手能帮帮我,非常感谢。程序的主要思想如下:从外部读入##.dat数据文件,文件中数据的格式如下:-22.8610.0000E+000.0000E+000.0000E+000.0000E+000.0000E+000.0000E+000.0000E+000.0000E+00
-22.7570.0000E+000.0000E+000.0000E+000.0000E+000.0000E+000.0000E+000.0000E+000.0000E+00
-22.6530.0000E+000.0000E+000.0000E+000.0000E+000.0000E+000.0000E+000.0000E+000.0000E+00
8.30584633 -22.86107336301 -1.80973197 1.00000000
-22.8610.0000E+000.0000E+000.0000E+000.0000E+000.0000E+000.0000E+000.0000E+000.0000E+00
-22.7570.0000E+000.0000E+000.0000E+000.0000E+000.0000E+000.0000E+000.0000E+000.0000E+00
-22.6530.0000E+000.0000E+000.0000E+000.0000E+000.0000E+000.0000E+000.0000E+000.0000E+00
8.30584633 -22.86107336301 -1.80973197 1.00000000
-22.8610.0000E+000.0000E+000.0000E+000.0000E+000.0000E+000.0000E+000.0000E+000.0000E+00
-22.7570.0000E+000.0000E+000.0000E+000.0000E+000.0000E+000.0000E+000.0000E+000.0000E+00
-22.6530.0000E+000.0000E+000.0000E+000.0000E+000.0000E+000.0000E+000.0000E+000.0000E+00
一共有16段,每段有很多行,要求每段除第一行外,每行的数据相加。最后得到的结果形式如下:
-22.861 *********(第2列+第3列+。。。+最后一列)
-22.757 *********
-22.653 *********
8.30584633 -22.86107336301 -1.80973197 1.00000000
-22.861 *********
-22.757 *********
-22.653 *********
8.30584633 -22.86107336301 -1.80973197 1.00000000
-22.861*********
-22.757*********
-22.653*********
希望好心人帮忙这个程序怎么写,联系方式
luomin_zht@163.com 补充说明:
上面的数据文件仅是数据格式,真实的数据是每一段不是3行,是几百行,每一段有几十列,每段数据的第一列都是一样的
谢谢好心人 定义一个二维数组用数组来读取数据,然后将你所需要的数组数据进行相加就可以了。 谢谢zhoulon,我也是这样做的的,但这对第一段数据是可以的但接下来的第2段,第3段。。。。没办法进行,我不知道如何实现:第1段运行好了,接下来第2段,第3段,。。。
还有个问题是每段之间都隔了一行“ 8.30584633 -22.86107336301 -1.80973197 1.0000000”
怎么能跳过去,非常感谢总版主 你的做法不对,之所以要定义二维数组就是要让一个维数参与变量大的循环,另外一个自己来进行循环,值域你两段之间中间间隔那两个数字,可以在遇到的时候,书写一个read (*,*) 就可以跳过去了
open (1,file=' ',.....)
do i=1,10
read (1,10) (ea(i,j),j=1,20)
end do
close (1)
其它的东西就省略不写了,你自己看一下弄吧,呵呵。 谢谢总版主zhoulon
我意思没表达清楚,应该是我的意思对特定的行,将所有的列相加(第1列除外)
举个例子:输入文件数据格式
1 2 3 5
2 7 8 3
3 4 6 2
121223 33232 4454
1 2 3 5
2 7 8 3
3 4 6 2
121223 33232 4454
1 10
2 18
3 12
要求输出数据为:
1 10(2 +3 +5=10)
2 18 (7+8 +3=18)
3 12 (4 +6 +2=12)
121223 33232 4454
1 10(2 +3 +5=10)
2 18 (7+8 +3=18)
3 12 (4 +6 +2=12)
121223 33232 4454
1 10(2 +3 +5=10)
2 18 (7+8 +3=18)
3 12 (4 +6 +2=12)
红色为说明内容
谢谢总版主,望总版主指点 这个也是一样的啊,我上面的代码只是让你读取数据的一个样板啊,你将数据读取出来以后自己相加不就可以了嘛,我给你写代码的话,不知道你的文件的具体格式,没有办法写呀,况且我也有事情啊,你自己好好想想吧,呵呵。
do i=1,10
read (1,10) (ea(i,j),j=1,20)
sum=0.0
do j=2,20
sum=sum+ea(i,j)
end do
end do
你看一下上面的代码是不是你想要的,呵呵。 谢谢zhoulon总版主的热心帮助,我再仔细推敲推敲 楼主需要熟悉下fortran的基本语法了。 我现在的问题还是分段读取数据的问题,感觉没法实现,我的小程序只能实现第一段数据:
write(*,'(A)',advance='NO') 'Input file: '
read(*,'(A)') fni
write(*,'(A)',advance='NO') 'Output file: '
read(*,'(A)') fno
open(8,file=fni)
open(9,file=fno)
doI= 1,301
read(8,*)(P(I,J),J=1,19)
sum = 0.0
doJ = 2,19
sum = sum + P(I,J)
end do
write(9,15)P(I,1),sum
end do
15 format(1x,F10.4,1x,D12.5)
! end
close (8)
close (9)
无法读取接下来几段的数据,希望大侠多多指教,非常感谢!!
我的数据是一共十六段,每段之间隔一行,每段数据是301行,19列 你没有加入对接下来的那行不一样的数据的判断,当然程序读取不出来了,由于我不知道你的具体数据结构,这里只是提个醒吧。 :loveliness:已解决,谢谢各位好心人
页:
[1]