- 积分
 - 7521
 
	- 贡献
 -  
 
	- 精华
 
	- 在线时间
 -  小时
 
	- 注册时间
 - 2011-9-20
 
	- 最后登录
 - 1970-1-1
 
 
 
 
 
 
 | 
	
 
登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册 
 
 
 
x
 
 本帖最后由 虫儿飞 于 2015-11-11 17:28 编辑  
 
先不说别的,先贴程序。 
 
program main 
   
  implicit none 
   
  character*30  :: str 
  character*100  :: rstr(1000) 
  integer*4   :: n,i 
  str = '545110-99999-2013.TXT' 
  call sub_split(trim(str),'-',rstr,n) 
  print *,n 
  do i= 1,n 
   print *,i,rstr(i),len(rstr(i)) 
  enddo 
  return 
end  
subroutine sub_split(str,instr,rstr,n) 
  !!! 原字符串str从非空开始,结束于非空 
!!! str 需要分割的字符串,instr 分割字符,支持单个字符或者字符串作为分割字符,rstr 存放分割结果的字符数组,允许最多存放1000段,每段100个字符,n 实际分割出的字符(串)数 
  implicit none 
  character(len=*) :: str,instr 
  character*100  :: rstr(1000) 
  integer*4   :: n 
  integer*4   :: allcount,subcount 
  integer*4   :: ilab,i 
  logical*4   :: logflag 
  allcount = len(str) 
  subcount = len(instr) 
  i=1 
  n = 0 
  ilab = 1 
  logflag = .false. 
  do while(i<=allcount-subcount) 
   if(str(i:i+subcount-1).eq.instr) then 
    if(logflag) then 
     n = n+1 
     rstr(n) = str(ilab:i-1) 
     logflag = .false. 
    endif 
    ilab = i+subcount 
    i = i+1 
   else 
    logflag = .true. 
    i = i+1 
   endif 
  enddo 
  if(logflag) then 
   if(str(i:i+subcount-1).eq.instr) then 
    n=n+1 
    rstr(n) = str(ilab:i-1) 
   else 
    n=n+1 
    rstr(n) = str(ilab:i+subcount-1) 
   endif 
  endif 
  return 
end 
 
目前只支持单一分隔符(多个字符组成字符串算是单一分隔符)。如果字符串是这样的: '-545110---99999--2013-TXT-',可以用'-'作为分隔符分为四段,用'--'分为三段......其余的供联想 
如果需要多个分隔符,可以将其他的字符都替换为一种,也可以提供程序。 
替换字符串中的某个字符 http://bbs.06climate.com/forum.php?mod=viewthread&tid=15825 
 
当然之前也有其他小伙伴给出了程序,不过侧重点不一样,不过我的亮点在于可以支持字符串作为分隔符,可操作性更高。不过程序一并给出,供参考。 
 
数据分割函数  http://bbs.06climate.com/forum.php?mod=viewthread&tid=9624  
fortran中按字符拆分字符串的子程序 http://bbs.06climate.com/forum.php?mod=viewthread&tid=4632 
 
欢迎大家进行异常测试,并十分希望大家将测试结果反馈,谢谢! 
 |   
 
评分
- 
查看全部评分
 
 
 
 
 
 |