tt99166 发表于 2023-9-22 22:10:58

1.4 Codesys在字符串1查找字符串2的位置(从左向右、从右向左)功能

1、在长字符串String1中的指定位置开始,从左向右查找短字符串String2最先出现的位置。具体功能代码如下:
FUNCTION FINDP : INT
VAR_INPUT
        InString1 : STRING(255);          //长字符串
        InString2 : STRING(255);          //短字符串
        InPos   : INT;                  //查找起始位置
END_VAR
VAR
        iPostion: INT;
        iLength1: INT;       
        iLength2: INT;
END_VAR


//计算从字符串String1指定的位置开始出现String2的位置(从左往右)
iLength1 := Standard.LEN(InString1);
iLength2 := Standard.LEN(InString2);
IF iLength1 < iLength2 OR iLength2 = 0 THEN
   RETURN;
END_IF;

FOR iPostion := MAX(InPos,1) TO (iLength1 - iLength2 + 1) BY 1 DO
        IF Standard.MID(InString1,iLength2,iPostion) = InString2 THEN
                FINDP := iPostion;
                RETURN;
        END_IF;
END_FOR;
FINDP := 0;测试结果如下:


2、在长字符串String1中的最右端开始,从右向左查找短字符串String2最先出现的位置。具体功能代码如下:
FUNCTION FINDB : INT
VAR_INPUT
        InString1 : STRING(255);          //长字符串
        InString2 : STRING(255);          //短字符串
END_VAR
VAR
        iPosition : INT;
        iLength1: INT;       
        iLength2: INT;
END_VAR

//计算String2在String1出现的位置(从右往左)
iLength1 := Standard.LEN(InString1);
iLength2 := Standard.LEN(InString2);
IF iLength1 < iLength2 THEN
   FindB := 0;
   RETURN;
END_IF;
FOR iPosition := iLength1 - iLength2 + 1 TO 1 BY -1 DO
        IF Standard.MID(InString1,iLength2,iPosition) = InString2 THEN
           FindB := iPosition;
           RETURN;
        END_IF;
END_FOR;
FindB := 0;测试结果如下:


   以上功能的实现依靠Standard库的字符串功能,因此查找字符串长度最大长度255。
页: [1]
查看完整版本: 1.4 Codesys在字符串1查找字符串2的位置(从左向右、从右向左)功能