回 帖 发 新 帖 刷新版面

主题:如何读取指定列指定行数据,高手相助啊/...

我现在有个450个文件,名字类似如100.2ek8sdcn.000000.txt,100.2ek8sdcn.000000.txt,我现在想读取每个文件中第5列的某数据,这样450个文件就可以读取450个数据,赋值给数组,但是,我用下面的代码(全部code的一部分)老出错,说invalid iteger...我现在想知道如何读取文件的指定行指定列?谢谢各位大侠相助,忙活了半天没找出原因。。。
!=================== define variables================================
    integer k,i,j,ii     ! for inner loop
    character(len=24) ::FN
    integer x,y,N,m
    real,dimension(10:3477):: a,b,c,d,e(10:3477),f,g,h,hh
    real,parameter:: dt=10
    real area,sum1
    real, dimension(1:450):: u,u1     !velocity,velocity prime
    real, dimension(0:449):: R            !relative coefficient
    
!======READ and prepare INPUT DATA===================================
    
    read(*,*)  x       ! read x value from screen 
    read(*,*)  y       ! read y value from screen
   N=449
      do m=0,N
     write(FN,100)m     ! FN is intermediate 
     write(6,*)FN
     open(1,file=FN)
     do ii=10,3477 
         read(1,*) a,b,c,d,e,f,g,h,hh 
        
        u(m+1)=e(10+51*x+y)    !将第列的第(10+51*x+y)行这个element赋值给u(m+1)
        write(*,*) u(m+1)
    enddo     
     close(1)
   end do
100 format('100.2ek8sdcn.000',I3.3,'.txt') ! the format of the data file name

回复列表 (共3个回复)

沙发

不嫌麻烦的话你可以先把全部数组赋值给一个450*5的数组A里 然后将第五列赋值取出赋给B  
open(61,file='路径')
    rewind(61)
      read(61,*) ((A(i,j),j=1,5),i=1,450)
      do 55 i=1,450
      do 55 j=5
        B(i,1)=A(i,5)
   55 continue

板凳

用指针行不行呢,怎样写啊,同求指导啊

3 楼

给你一个思路:
1.把这450个文件名(包括后缀)保存在一个文件中。如你可以用以下方法生成这个文件:
   (1)找到存入这450个文件的文件夹,在这里新建一个txt文档(假设文件名为name.txt),打开后输入以下内容:  dir /b /on>>filename.txt
   (2)保存这个name.txt文件,将后缀改为bat,即name.txt变为name.bat.
   (3)双击name.bat,之后会生成一个filename.txt的文件,这个文件的内容就包含了450个文件名,当然还有其它的文件名,你可以复制出来自己就好处理了。

2.有了包含这450个文件名后,在Fortran程序中打开它,读入一组字符串数组。
3.有了以文件名为字符串数组后,你就可以在一个循环里打开文件,进行操作。

注意:
1.以上生成450个文件名的方法,只适合在Windows操作系统下,其它系统不支持。
2.在Fortran PowerStation 4.0系统里,打开文件数有限制,好像是60,即在一个程序中最多只能用60个文件代码出现。CVF好像没有这个限制,IVF就不清楚了。  我估计你上面出现的问题很可能与这个限制有关。

我来回复

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