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.

FindAndSplit 2: Eingänge

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

Name

Typ

Beschreibung

pSeparator

POINTER TO STRING

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

pSrcString

POINTER TO STRING

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

pLeftString

POINTER TO STRING

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

nLeftSize

UDINT

Maximale Größe der separierten linken Zeichenfolge.

pRightString

POINTER TO STRING

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

nRightSize

UDINT

Maximale Größe der separierten rechten Zeichenfolge

bSearchFromRight

BOOL

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