爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 2963|回复: 1

[源代码] 字符串 分割子程序 spilt

[复制链接]

新浪微博达人勋

发表于 2015-11-11 17:28:28 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

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

欢迎大家进行异常测试,并十分希望大家将测试结果反馈,谢谢!

评分

参与人数 1金钱 +15 贡献 +5 收起 理由
mofangbao + 15 + 5

查看全部评分

密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2015-11-11 17:31:09 | 显示全部楼层
自己再贴一个测试

'-545110-*99999-*2013.TXT-*'
'-*'

3
1 -545110  
2 99999
3 2013.TXT
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表