luomin2008 发表于 2009-3-21 07:44:13

新人求助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

luomin2008 发表于 2009-3-21 07:48:58

补充说明:
上面的数据文件仅是数据格式,真实的数据是每一段不是3行,是几百行,每一段有几十列,每段数据的第一列都是一样的

谢谢好心人

zhoulon 发表于 2009-3-21 10:54:41

定义一个二维数组用数组来读取数据,然后将你所需要的数组数据进行相加就可以了。

luomin2008 发表于 2009-3-21 15:23:44

谢谢zhoulon,我也是这样做的的,但这对第一段数据是可以的但接下来的第2段,第3段。。。。没办法进行,我不知道如何实现:第1段运行好了,接下来第2段,第3段,。。。
还有个问题是每段之间都隔了一行“ 8.30584633    -22.86107336301   -1.80973197      1.0000000”
怎么能跳过去,非常感谢总版主

zhoulon 发表于 2009-3-21 16:12:02

你的做法不对,之所以要定义二维数组就是要让一个维数参与变量大的循环,另外一个自己来进行循环,值域你两段之间中间间隔那两个数字,可以在遇到的时候,书写一个read (*,*) 就可以跳过去了
open (1,file='   ',.....)
do i=1,10
   read (1,10) (ea(i,j),j=1,20)
end do
close (1)

zhoulon 发表于 2009-3-21 16:12:37

其它的东西就省略不写了,你自己看一下弄吧,呵呵。

luomin2008 发表于 2009-3-21 17:41:19

谢谢总版主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)


红色为说明内容
谢谢总版主,望总版主指点

zhoulon 发表于 2009-3-22 06:58:26

这个也是一样的啊,我上面的代码只是让你读取数据的一个样板啊,你将数据读取出来以后自己相加不就可以了嘛,我给你写代码的话,不知道你的文件的具体格式,没有办法写呀,况且我也有事情啊,你自己好好想想吧,呵呵。

zhoulon 发表于 2009-3-22 07:00:51


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 发表于 2009-3-22 07:03:40

你看一下上面的代码是不是你想要的,呵呵。

luomin2008 发表于 2009-3-22 07:17:55

谢谢zhoulon总版主的热心帮助,我再仔细推敲推敲

fenglinxiaoxue 发表于 2009-3-23 08:56:10

楼主需要熟悉下fortran的基本语法了。

luomin2008 发表于 2009-3-23 11:05:18

我现在的问题还是分段读取数据的问题,感觉没法实现,我的小程序只能实现第一段数据:
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列

zhoulon 发表于 2009-3-24 10:59:42

你没有加入对接下来的那行不一样的数据的判断,当然程序读取不出来了,由于我不知道你的具体数据结构,这里只是提个醒吧。

luomin2008 发表于 2009-4-4 16:00:15

:loveliness:已解决,谢谢各位好心人
页: [1]
查看完整版本: 新人求助FOTRAN,急,谢谢好心人