主题:fortran 如何提取TXT中某列的数据存入一个数组,再对数组做处理
jairq12
[专家分:0] 发布于 2010-09-26 20:42:00
1 991.2 946.1 0.05 0.0042 1.64 44693.82
2 958.1 847.7 0.287 0.0095 0.77 41607.11
3 918.8 317.1 0.146 0.0088 0.83 39786.99
4 982.3 342.7 0.297 0.0169 0.64 37142.6
5 893.9 465.2 0.322 0.0074 1.13 42344.91
6 1010.9 1098.6 0.127 0.0062 0.58 41300.29
7 975.9 457.3 0.256 0.0132 1.61 43883.29
8 954.6 420.7 0.399 0.003 0.92 39171.05
9 921.6 373.4 0.203 0.0051 1.7 40344.36
10 945.1 282.7 0.368 0.0123 0.59 36571.87
11 905 509 0.391 0.0151 1.03 42504.63
12 941 572.1 0.105 0.0129 1.83 41944.88
13 891.3 593.2 0.271 0.003 1.57 42175.65
14 965.3 803.9 0.332 0.0079 0.76 41304.97
15 1032.4 996.4 0.377 0.0071 1.36 41329.23
16 838.6 914.2 0.306 0.0139 1.9 42925.04
17 932.7 219.2 0.112 0.0054 0.51 36040.02
18 858.4 1020 0.41 0.0045 1.33 38832.82
19 1015.9 539.7 0.16 0.0148 1.05 40171.46
20 1028.4 780.2 0.193 0.0162 1.75 42564.07
21 875.1 744 0.23 0.0111 1.13 40026.32
22 882.6 236.1 0.081 0.0087 1.43 39412.47
23 852.2 690.9 0.064 0.012 1.2 41157.89
24 986.1 1137.6 0.343 0.0037 0.96 43133.87
25 1000.7 1116.7 0.142 0.0068 1.49 43078.59
26 864.5 1065.4 0.353 0.0103 1.23 42872.97
27 928.8 1172.9 0.218 0.0021 1.79 42082.08
28 842.5 640.7 0.179 0.016 0.87 41902.02
29 872.8 886.1 0.207 0.0112 0.7 41819.36
30 1003.5 653.5 0.098 0.0142 1.31 42043.8
31 906.3 814.1 0.243 0.0101 1.53 43629.89
将所有数据提取存入到一个A(31,7)的数组中,然后以A(i,7)(i=1-31)为参考按升序排列,重新获得一个新的A'(31,7)数组,请教各位高手该如何操作?
回复列表 (共10个回复)
沙发
jstzhurj [专家分:4680] 发布于 2010-09-26 22:22:00
标题还是容易理解的,文中的表述就让人费解了。
do i=1,31
read(10,*) (a(i,j),j=1,7)
b(i) = a(i,k) !k 为你要的列
enddo
板凳
jairq12 [专家分:0] 发布于 2010-09-27 09:40:00
非常感谢您的回复,我是个Fortran90初学者
上面那些数据都是在一个txt文档里 我要做的就是把他们提取出来存在一个二位数组里面,然后要对这个二位数组进行一个换行,换行的依据就是以数组的最后一列为依据,对最后一列数据按从小到大的顺序排列 按排列的顺序进行数组的换行。
或者,不知道能否用31个一维数组来做,请高手指点了。谢谢
3 楼
jairq12 [专家分:0] 发布于 2010-09-27 09:40:00
[quote]
标题还是容易理解的,文中的表述就让人费解了。
do i=1,31
read(10,*) (a(i,j),j=1,7)
b(i) = a(i,k) !k 为你要的列
enddo
[/quote]
2楼
非常感谢您的回复,我是个Fortran90初学者
上面那些数据都是在一个txt文档里 我要做的就是把他们提取出来存在一个二位数组里面,然后要对这个二位数组进行一个换行,换行的依据就是以数组的最后一列为依据,对最后一列数据按从小到大的顺序排列 按排列的顺序进行数组的换行。
或者,不知道能否用31个一维数组来做,请高手指点了。谢谢
4 楼
jstzhurj [专家分:4680] 发布于 2010-09-27 10:58:00
[quote]非常感谢您的回复,我是个Fortran90初学者
上面那些数据都是在一个txt文档里 我要做的就是把他们提取出来存在一个二位数组里面,然后要对这个二位数组进行一个换行,换行的依据就是以数组的最后一列为依据,对最后一列数据按从小到大的顺序排列 按排列的顺序进行数组的换行。
或者,不知道能否用31个一维数组来做,请高手指点了。谢谢[/quote]
这个简单,如下
program main
implicit none
integer::i,j
real(kind=8),dimension(31,7)::a,tmp
open(10,file='data.txt',status='old')
!数据读入
do i=1,31
read(10,*) (a(i,j),j=1,7)
enddo
!数据排序
do i=1,31
do j=i+1,31
if (a(i,7)>a(j,7)) then
tmp(j,:) = a(j,:)
a(j,:) = a(i,:)
a(i,:) =tmp(j,:)
endif
enddo
enddo
!排序后输出
do i=1,31
write(*,'(7f12.5)') (a(i,j),j=1,7)
enddo
end program
5 楼
asymptotic [专家分:16630] 发布于 2010-09-27 11:37:00
tmp 需要那么大吗? tmp(7) 足够了吧。
6 楼
jstzhurj [专家分:4680] 发布于 2010-09-27 11:40:00
[quote]tmp 需要那么大吗? tmp(7) 足够了吧。[/quote]
31*7不是很大,便于理解就用了和原来一样的形状。
7 楼
jstzhurj [专家分:4680] 发布于 2010-09-27 11:48:00
按asymptotic的建议,换成下面的代码也一样实现
program main
implicit none
integer::i,j
real(kind=8),dimension(31,7)::a
real(kind=8),dimension(7)::tmp
open(10,file='data.txt',status='old')
!数据读入
do i=1,31
read(10,*) (a(i,j),j=1,7)
enddo
!数据排序
do i=1,31
do j=i+1,31
if (a(i,7)>a(j,7)) then
tmp(:) = a(j,:)
a(j,:) = a(i,:)
a(i,:) =tmp(:)
endif
enddo
enddo
!排序后输出
do i=1,31
write(*,'(7f12.5)') (a(i,j),j=1,7)
enddo
end program
8 楼
jairq12 [专家分:0] 发布于 2010-09-27 14:11:00
[quote]
按asymptotic的建议,换成下面的代码也一样实现
program main
implicit none
integer::i,j
real(kind=8),dimension(31,7)::a
real(kind=8),dimension(7)::tmp
open(10,file='data.txt',status='old')
!数据读入
do i=1,31
read(10,*) (a(i,j),j=1,7)
enddo
!数据排序
do i=1,31
do j=i+1,31
if (a(i,7)>a(j,7)) then
tmp(:) = a(j,:)
a(j,:) = a(i,:)
a(i,:) =tmp(:)
endif
enddo
enddo
!排序后输出
do i=1,31
write(*,'(7f12.5)') (a(i,j),j=1,7)
enddo
end program[/quote]
非常感谢指点 ,这还只是我的一个算法的一小部分,后面还有很多需要用程序来写,刚开始学fortran所以很吃力,后面的程序 遇到困难还请您多多指教 不胜感谢啊 。
9 楼
cgl_lgs [专家分:21040] 发布于 2010-09-27 15:38:00
建议楼主还是赶紧多看书才是:)
10 楼
jairq12 [专家分:0] 发布于 2010-09-27 21:08:00
[quote]建议楼主还是赶紧多看书才是:)[/quote]
没办法 毕业前临时换的课题 时间有点紧 只能尽力而为了
我来回复