FindAndSplit
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.
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 |