回 帖 发 新 帖 刷新版面

主题:fortran 如何提取TXT中某列的数据存入一个数组,再对数组做处理

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个回复)

沙发


标题还是容易理解的,文中的表述就让人费解了。

do i=1,31
  read(10,*) (a(i,j),j=1,7)
  b(i) = a(i,k) !k 为你要的列
enddo

板凳

非常感谢您的回复,我是个Fortran90初学者
上面那些数据都是在一个txt文档里 我要做的就是把他们提取出来存在一个二位数组里面,然后要对这个二位数组进行一个换行,换行的依据就是以数组的最后一列为依据,对最后一列数据按从小到大的顺序排列 按排列的顺序进行数组的换行。
或者,不知道能否用31个一维数组来做,请高手指点了。谢谢

3 楼

[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 楼

[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 楼

tmp 需要那么大吗? tmp(7) 足够了吧。

6 楼

[quote]tmp 需要那么大吗? tmp(7) 足够了吧。[/quote]

31*7不是很大,便于理解就用了和原来一样的形状。

7 楼


按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 楼

[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 楼

建议楼主还是赶紧多看书才是:)

10 楼

[quote]建议楼主还是赶紧多看书才是:)[/quote]
没办法 毕业前临时换的课题 时间有点紧 只能尽力而为了

我来回复

您尚未登录,请登录后再回复。点此登录或注册