分割字符串_FanucKarel中实现字符串分割

e6d252c87accdc72e4f2014c593137b5.gif

c647353c339a7c8c3851d26cb23af1b2.gif

 分享与快乐同在!

最近有小伙伴询问如何按指定分隔符分割字符串,在karel中并没有按字符分割的内置程序供我们使用,那么我们就来实现这个功能!

在项目中,经常会在字符串中提取数据,比如机器人与相机使用TCP/IP通讯、字符串文本中数据提取等等。如何按字符将一个字符串数据拆分为多个字符串,最终将字符串转换为其他数据类型?

实现代码:

注:在代码中并未将字符串转为real数据类型,那只是调用一下内置函数

PROGRAM str_cut1%STACKSIZE = 4000%INCLUDE ../0_Lib/libTypeVAR   PList:PRMType    --参数存放位置    count,i,prmCount:INTEGER    --字符串分割后存放位置,根据实际需求设定数组、字符串长度。  StrList:ARRAY[30] OF STRING[30]      --字符串剪切分割  ROUTINE str_split(source,split:STRING;strArray:ARRAY OF STRING):INTEGER FROM libRoutine  --获取参数函数  ROUTINE GetPRM(count:INTEGER;valueType:ARRAY OF INTEGER;intValue:ARRAY OF INTEGER;realValue:ARRAY OF REAL;str:ARRAY OF STRING;stateValue:ARRAY OF INTEGER):INTEGER FROM libRoutine    BEGIN  --获取参数  prmCount = GetPRM(PList.count , PList.valueType , PList.intValue , PList.realValue , PList.str , PList.statusValue)        --判断参数1、2 均为字符串  IF((prmCount =2) AND ( PList.valueType[1] = strType  ) AND ( PList.valueType[2] = strType  )  ) THEN      --按参数2字符串,分割参数1字符串,结果存放在 Strlist数组中      count = str_split(PList.str[1],PList.str[2],StrList)    --打印分割后,字符串段数    WRITE(CR,'total:',count,CR)    --遍历打印字符串    FOR i=1 TO count DO       WRITE(' [',StrList[i],'] ')    ENDFOR          ENDIF  --end--END str_cut1

程序中,引用了libroutine文件中的 str_split函数来实现字符串分割。

str_split函数有3个参数:

source:需要被分割的字符串。

split:    分割符号

strArray:分割后的字符串

返回值:字符串被分割后的段数,如果没有分割,也将返回1。

libRoutine 文件中 str_split函数实现代码:

--按字符分割字符串--source:被分割字符串--split:分割符,支持多个字符--strArray:分割后的单个字符串数组ROUTINE str_Split(source,split:STRING;strArray:ARRAY OF STRING):INTEGERVAR   count,i:INTEGER  splitLen:INTEGER  sourceLen:INTEGER    readPos:INTEGER  splitIndex:INTEGER  strTemp:STRING[254]      maxCount:INTEGERBEGIN  count  =0  splitIndex = 0  readPos = 1  splitLen = STR_LEN(split)  sourceLen = STR_LEN(source)      maxCount = ARRAY_LEN(strArray)        IF (splitLen = 0) OR (sourceLen = 0) THEN    RETURN (0)  ENDIF    FOR i = 1 TO maxCount DO            --复制源字符串    strTemp =    SUB_STR(source,readPos,sourceLen)            --查找分隔符位置    splitIndex = INDEX(strTemp,split)                      count=count+1    IF splitIndex > 0 THEN            readPos =  readPos + splitIndex+splitLen-1              --剪切字符串      strArray[count] = SUB_STR(strTemp,1,splitIndex-1)          else              strArray[count] = strTemp            RETURN (count)    ENDIF        --判断越界    IF readPos > sourceLen THEN      RETURN (count)    ENDIF          ENDFOR    RETURN (count)  END str_Split

OK!今天的分享到此结束,记得分享哦!

96f1063b445b537898c45fb207650899.gif

cb8b017630e6a8a0ced373dd1c0ea849.png

3aea608948d40dcdfc625a3f633a1df5.png

7d5c301f2e6cc0e06660bad5ac9ef0f7.png

b55d4e3122060e01e794a9fc4cb16924.png

212edec5c841c8aae016f0526b211434.png

079d1d9e545f89332640065e0dd599f5.png

NO.97

 Robot Tips

2020

67a45a9bbe3e8ae4820d360c32cdeac0.gif 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值