回 帖 发 新 帖 刷新版面

主题:求助fortran中的问题,拜托各位了

program main
      implicit none
      real,allocatable :: a(:)
      integer n,error,i
 
      open(10,file="m.txt")
 
      n=0

      do while(.true.)
       read(10,*,iostat=error)
       if(error/=0)then
      exit
      else
      n=n+1
      end if
      end do

      rewind(10)

      allocate(a(n))

       do i=1,n 
       read(10,*)a(i)
       write(*,*)a(i)

这个程序我运行的时候他一直只能读取文件中的第一列数据,怎么修改才能读取全部数据呢?

回复列表 (共12个回复)

沙发

那你的文件有多少列?

板凳


3列,19580行

3 楼


3列,19580行

4 楼

[quote]那你的文件有多少列?[/quote]
3列,19580行

5 楼

-_-! 回复了3层楼...

3列的话你相应修改一下源代码就可以了. a(:)换成二维数组

real,allocatable :: a(:,:)
下面
allocate(a(3, n))
读取
read(10,*)a(:,i) ! 假设这3列都是相同的浮点数类型

6 楼

read(10,*)a(i)
这句当然是只读了一列了。。。
把数组a改成2维的吧。

7 楼


冒昧问一句如果格式不同怎么办?

8 楼

[quote]
冒昧问一句如果格式不同怎么办?[/quote]
无格式读取时跟格式无关,只要你有空格或是TAB做为分隔就行了(貌似逗号分隔也行)

9 楼

数据格式不同就要用不同类型的变量来接收. 例如有一列是整形那就建立一列整形数组来接收. 这个如果想了解清楚一些还是翻书为上策.

10 楼


program main
      implicit none
      real,allocatable :: a(:,:)
      real p
      integer n,error,i,j,m
 
      open(10,file="dadt.txt")
 
      n=0
      
      do while(.true.)
       read(10,*,iostat=error)
       if(error/=0)then
      exit
      else
      n=n+1
      
      end if
      end do

      rewind(10)

      allocate(a(6,n))

       do   i=1,n
       read(10,*)a(:,i)
       
 P=sqrt(a(4,i)**2+a(5,i)**2+a(6,i)**2)
    write(*,*) p
    end do
 
   end

因为我太初学fortran,所以想再问一下,我现在做了一个计算P=sqrt(a(4,i)**2+a(5,i)**2+a(6,i)**2)  接下来我需要统计p在0.05到1之间有几个数,由于数据很多,并且结果呈一列,我不会处理,我该做什么修改好呢????

我来回复

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