FindAndSplit

FindAndSplit 1:

Die Funktion zerlegt eine Zeichenfolge in zwei Zeichenfolgen.

Dabei wird die Zeichenfolge von links nach rechts nach einem Separator (z. B. „\“) durchsucht. Die Zeichenfolgen zu beiden Seiten dieses ersten Vorkommnisses des Separators werden ausgegeben.

Die Suchrichtung kann mittels des Parameters bSearchFromRight geändert werden, so dass die Zeichenfolge von rechts nach links durchsucht wird.

Die Funktion stoppt die Überprüfung der Eingangslänge nach Parameterlist.cMaxCharacters Zeichen, um eine Endlosschleife zu vermeiden.

FUNCTION FindAndSplit : BOOL

Der Rückgabewert ist TRUE, wenn der Separator gefunden wurde sowie die Teilung und Ausgabe der Zeichenfolgen erfolgreich waren.

VAR_INPUT

VAR_INPUT
    pSeparator        : POINTER TO STRING;
    pSrcString        : POINTER TO STRING;
    pLeftString       : POINTER TO STRING;
    nLeftSize         : UDINT;
    pRightString      : POINTER TO STRING;
    nRightSize        : UDINT;
    bSearchFromRight  : BOOL;
END_VAR

pSeparator: Zeiger auf die STRING-Variable, welche den Separator darstellt.

pSrcString: Zeiger auf die STRING-Variable, welche die Quell-Zeichenfolge darstellt.

pLeftString: Zeiger auf die STRING-Variable, in welcher die separierte linke Zeichenfolge ausgegeben werden soll.

nLeftSize: Maximale Größe der separierten linken Zeichenfolge.

pRightString: Zeiger auf die STRING-Variable, in welcher die separierte rechte Zeichenfolge ausgegeben werden soll.

nRightSize: Maximale Größe der separierten rechten Zeichenfolge.

bSearchFromRight: Falls der Eingang gesetzt ist, ändert sich die Suchrichtung, so dass die Zeichenfolge von rechts nach links nach dem Separator durchsucht wird.

Beispiel „Zerlegung in mehrere Teil-Zeichenfolgen“:

Dieses Beispiel zeigt, wie eine Zeichenfolge 'machines/machine1/module2/data/tx' in mehrere Zeichenfolgen ['machines', 'machine1', 'module2', 'data', 'tx'] zerlegt wird. Hierzu wird die Funktion FindAndSplit() wiederholt in einer Schleife aufgerufen.

PROGRAM MAIN
VAR
    sSrc         : STRING(255) := 'machines/machine1/module2/data/tx';
    sSeparator   : STRING(1) := '/';
    aSplit       : ARRAY[1..cMax] OF STRING(255);
    bResultSplit : BOOL;
    i            : UDINT;
END_VAR
VAR CONSTANT
    cMax         : UDINT := 9;
END_VAR
aSplit[1] := sSrc;
FOR i:=1 TO cMax-1 DO
    bResultSplit := FindAndSplit( pSeparator     := ADR(sSeparator),  pSrcString := ADR(aSplit[i]), 
                                  pLeftString    := ADR(aSplit[i]),   nLeftSize  := SIZEOF(aSplit[i]), 
                                  pRightString   := ADR(aSplit[i+1]), nRightSize := SIZEOF(aSplit[i+1]),
                                  bSearchFromRight := FALSE );
    IF NOT bResultSplit THEN
        EXIT;
    END_IF
END_FOR

Beispiel „Zusammenführen mehrerer Zeichenfolgen”:

Dieses Beispiel zeigt, wie mehrere Zeichenfolgen ['machines', 'machine1', 'module2', 'data', 'tx'] in einer Zeichenfolge 'machines/machine1/module2/data/tx' zusammengeführt werden.

PROGRAM MAIN
VAR
    sSeparator    : STRING(1) := '/';
    aSplit        : ARRAY[1..cMax] OF STRING(255) := ['machines', 'machine1', 'module2', 'data', 'tx'];
    sJoined       : STRING(255);
    bResultConcat : BOOL;
    i             : UDINT;
END_VAR
VAR CONSTANT
    cMax          : UDINT := 5;
END_VAR
sJoined := aSplit[1];
FOR i:=1 TO cMax-1 DO
    bResultConcat := CONCAT2(pSrcString1 := ADR(sJoined), pSrcString2 := ADR(sSeparator), pDstString := ADR(sJoined), nDstSize := SIZEOF(sJoined));
    IF NOT bResultConcat THEN
        EXIT;
    END_IF
    bResultConcat := CONCAT2(pSrcString1 := ADR(sJoined), pSrcString2 := ADR(aSplit[i+1]), pDstString := ADR(sJoined), nDstSize := SIZEOF(sJoined));
    IF NOT bResultConcat THEN
        EXIT;
    END_IF
END_FOR

Voraussetzungen

Entwicklungsumgebung

Zielplattform

Einzubindende SPS-Bibliotheken (Kategoriegruppe)

TwinCAT v3.1.4024.11

PC oder CX (x86, x64, ARM)

Tc2_Utilities (System) >= 3.3.39.0