主题:请教fortran2008以及其他高手
看了你在http://bbs.pfan.cn/post-378089.html的程序
!此程序是将数据文件(要求每一行的数据个数相同,且每行首的分隔不能为逗号
!分隔符逗号和空格不能连续混合使用,空格可以连续),数据文件是整数。
!原理是:用动态分配数组的大小使用,先获取行数,再获取列数。
! Fortran2008 by 2011-11-09
implicit none
integer count1,count2,len,m,n,error
integer, allocatable :: a(:,:)
character(len=100) buffer
open(10,file="in.txt")
open(20,file="out.txt")
!**************************************************************************
!获取数组a(:,:)的行数
!**************************************************************************
count1=0
do while(1)
read(10,*,iostat=error)
if(error/=0) exit !读数据文件的每一行,如果读到文件结尾跳出。
count1=count1+1 !记录数据文件的行数。
end do
!**************************************************************************
!获取数组a(:,:)的列数
!**************************************************************************
rewind(10) !将当前读取位置移到数据文件开头。
read(10,"(A100)") buffer !读取文件的第一行以获取第一行数据有多少个列数。
len=len_trim(buffer) !取字符串的长度,不包括行尾的空格。
do N=1,len
if(buffer(N:N)==char(44)) buffer(N:N)=char(32) !将用分隔符逗号替换成空格。
enddo
buffer=trim(buffer)
len=len_trim(buffer)
do N=1,len
if(buffer(N:N)/=char(32))then
count2=1
do M=N+1,len
if(buffer(M:M)==char(32).and.buffer(M-1:M-1)/=char(32)) count2=count2+1
enddo
exit
endif
enddo
allocate(a(count1,count2)) !分配数组a(:,:)的大小。
buffer="(??I6)" !设定动态的输出格式。
buffer(2:2)=char(count2/10+48)
buffer(3:3)=char(mod(count2,10)+48)
write(*,*)"数组大小为:",count1,count2
rewind(10)
read(10,*) (a(M,:),M=1,count1)
write(06,buffer)((a(M,N),N=1,count2),M=1,count1)
write(20,buffer)((a(M,N),N=1,count2),M=1,count1)
end
如果数据文件是整数不是整数
比如下面这样 数据
1 1 1
1S 2P- 2P
我想把每行分拆成字符数组
比如第一行分成a(1)='1' a(2)='1' a(3)='1'
第二行分成b(1)='1S' b(2)='2P-' b(3)='2P'
怎么实现?! 编了一天没成功 需要高手帮助
!此程序是将数据文件(要求每一行的数据个数相同,且每行首的分隔不能为逗号
!分隔符逗号和空格不能连续混合使用,空格可以连续),数据文件是整数。
!原理是:用动态分配数组的大小使用,先获取行数,再获取列数。
! Fortran2008 by 2011-11-09
implicit none
integer count1,count2,len,m,n,error
integer, allocatable :: a(:,:)
character(len=100) buffer
open(10,file="in.txt")
open(20,file="out.txt")
!**************************************************************************
!获取数组a(:,:)的行数
!**************************************************************************
count1=0
do while(1)
read(10,*,iostat=error)
if(error/=0) exit !读数据文件的每一行,如果读到文件结尾跳出。
count1=count1+1 !记录数据文件的行数。
end do
!**************************************************************************
!获取数组a(:,:)的列数
!**************************************************************************
rewind(10) !将当前读取位置移到数据文件开头。
read(10,"(A100)") buffer !读取文件的第一行以获取第一行数据有多少个列数。
len=len_trim(buffer) !取字符串的长度,不包括行尾的空格。
do N=1,len
if(buffer(N:N)==char(44)) buffer(N:N)=char(32) !将用分隔符逗号替换成空格。
enddo
buffer=trim(buffer)
len=len_trim(buffer)
do N=1,len
if(buffer(N:N)/=char(32))then
count2=1
do M=N+1,len
if(buffer(M:M)==char(32).and.buffer(M-1:M-1)/=char(32)) count2=count2+1
enddo
exit
endif
enddo
allocate(a(count1,count2)) !分配数组a(:,:)的大小。
buffer="(??I6)" !设定动态的输出格式。
buffer(2:2)=char(count2/10+48)
buffer(3:3)=char(mod(count2,10)+48)
write(*,*)"数组大小为:",count1,count2
rewind(10)
read(10,*) (a(M,:),M=1,count1)
write(06,buffer)((a(M,N),N=1,count2),M=1,count1)
write(20,buffer)((a(M,N),N=1,count2),M=1,count1)
end
如果数据文件是整数不是整数
比如下面这样 数据
1 1 1
1S 2P- 2P
我想把每行分拆成字符数组
比如第一行分成a(1)='1' a(2)='1' a(3)='1'
第二行分成b(1)='1S' b(2)='2P-' b(3)='2P'
怎么实现?! 编了一天没成功 需要高手帮助