主题:求助fortran中的问题,拜托各位了
woshiyangwanqiu
[专家分:0] 发布于 2011-07-14 13:37:00
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个回复)
沙发
yeg001 [专家分:14390] 发布于 2011-07-14 14:13:00
那你的文件有多少列?
4 楼
woshiyangwanqiu [专家分:0] 发布于 2011-07-14 14:35:00
[quote]那你的文件有多少列?[/quote]
3列,19580行
5 楼
yeg001 [专家分:14390] 发布于 2011-07-14 15:01:00
-_-! 回复了3层楼...
3列的话你相应修改一下源代码就可以了. a(:)换成二维数组
real,allocatable :: a(:,:)
下面
allocate(a(3, n))
读取
read(10,*)a(:,i) ! 假设这3列都是相同的浮点数类型
6 楼
cgl_lgs [专家分:21040] 发布于 2011-07-14 15:07:00
read(10,*)a(i)
这句当然是只读了一列了。。。
把数组a改成2维的吧。
8 楼
cgl_lgs [专家分:21040] 发布于 2011-07-14 15:51:00
[quote]
冒昧问一句如果格式不同怎么办?[/quote]
无格式读取时跟格式无关,只要你有空格或是TAB做为分隔就行了(貌似逗号分隔也行)
9 楼
yeg001 [专家分:14390] 发布于 2011-07-14 21:01:00
数据格式不同就要用不同类型的变量来接收. 例如有一列是整形那就建立一列整形数组来接收. 这个如果想了解清楚一些还是翻书为上策.
10 楼
woshiyangwanqiu [专家分:0] 发布于 2011-07-14 22:55:00
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之间有几个数,由于数据很多,并且结果呈一列,我不会处理,我该做什么修改好呢????
我来回复