回复:在使用SCL时,如何使用FIND指令,寻找字符串中第二次、第三次重复出现的值

万泉河

  • 帖子

    10939
  • 精华

    132
  • 被关注

    1030

论坛等级:至圣

注册时间:2003-06-06

钻石 钻石 如何晋级?

发布于 2026-07-03 14:02:33

12楼

FUNCTION_BLOCK FB_ExtractBrackets

VAR_INPUT

    InputString : STRING[255];

    BracketIndex : INT;

END_VAR


VAR_OUTPUT

    ExtractedString : STRING[100];

    Valid : BOOL;

    TotalBrackets : INT;

END_VAR


VAR

    i : INT;

    bracketCount : INT;

    startPos : INT;

    endPos : INT;

    currentPos : INT;

    strLen : INT;

    ch : CHAR;

END_VAR


strLen := LEN(InputString);

bracketCount := 0;

currentPos := 1;

Valid := FALSE;

ExtractedString := '';

TotalBrackets := 0;


IF strLen > 0 THEN

    WHILE currentPos <= strLen AND NOT Valid DO

        ch := MID(IN := InputString, L := 1, P := currentPos);

        

        IF ch = '[' THEN

            bracketCount := bracketCount + 1;

            

            IF bracketCount = BracketIndex THEN

                startPos := currentPos + 1;

                

                FOR i := startPos TO strLen DO

                    ch := MID(IN := InputString, L := 1, P := i);

                    IF ch = ']' THEN

                        endPos := i - 1;

                        ExtractedString := MID(IN := InputString, L := endPos - startPos + 1, P := startPos);

                        Valid := TRUE;

                        EXIT;

                    END_IF;

                END_FOR;

            END_IF;

        END_IF;

        

        currentPos := currentPos + 1;

    END_WHILE;

    

    TotalBrackets := bracketCount;

END_IF;


END_FUNCTION_BLOCK

## 使用示例

假设输入字符串 [M251236D1][100Cr6][E1250396] :

// 提取第一组方括号内容

FB_ExtractBrackets(InputString := "[M251236D1][100Cr6][E1250396]", 

                   BracketIndex := 1);

// ExtractedString = "M251236D1", Valid = TRUE


// 提取第二组方括号内容

FB_ExtractBrackets(InputString := "[M251236D1][100Cr6][E1250396]", 

                   BracketIndex := 2);

// ExtractedString = "100Cr6", Valid = TRUE


// 提取第三组方括号内容

FB_ExtractBrackets(InputString := "[M251236D1][100Cr6][E1250396]", 

                   BracketIndex := 3);

// ExtractedString = "E1250396", Valid = TRUE


微信公众号:PLC标准化编程,ZHO6371995
评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-1500系列

共有11180条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

  • 分享

  • 只看
    楼主

top
X 图片
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。