REPLACE-Baustein

Kurz-Information

NameREPLACE
→POE-Typ→Funktion
KategorieIEC-Baustein, String, Baustein mit interner Fehlerdiagnose
Konform zur →IEC-Norm

(error) derzeit eingeschränkt
(IEC fordert Datentyp ANY_STRING für den Eingang IN1 und den Ergebniswert und daher auch diesen Datentyp: WSTRING. Dieser Datentyp wird derzeit für den Baustein nicht unterstützt.
IEC fordert Datentyp ANY_CHARS für den Eingang IN2 und daher auch diese Datentypen: 
WSTRINGCHARWCHAR. Diese Datentypen werden derzeit für den Baustein nicht unterstützt.)

Grafische Schnittstelle

Verfügbar ab

Version 1.31.0 (für logi.CAD 3 )

Funktionalität

Der Baustein ersetzt einen Teil in einem String durch einen anderen String und liefert den neu entstandenen String.

Am Eingang IN1 geben Sie eine Zeichenkette ein (= 1. String) und am Eingang IN2 eine andere Zeichenkette (= 2. String)Am Eingang L geben Sie die Anzahl der zu ersetzenden Zeichen ein (= Länge des zu löschenden Teils). Am Eingang P geben Sie die Position im 1. String ein. Ab dieser Position werden die Zeichen im 1. String gelöscht und stattdessen wird der 2. String eingefügt.

Spezialfälle (siehe unter "Beispiel für Verwendung im ST-Editor"):

  • Bei L = 0 werden keine Zeichen im 1. String gelöscht, der 2. String wird an der Position P eingefügt. Der Ausgang ENO wird hier auf den Wert TRUE gesetzt.
  • Falls ein negativer Wert bei L eingegeben ist, werden die entsprechenden Zeichen vor der Position P gelöscht. Hier wird der Ausgang ENO auf den Wert FALSE gesetzt. Falls Zeichen außerhalb des sichtbaren Bereichs gelöscht würden (vor Position 1), werden gar keine Zeichen gelöscht und eingefügt.
  • Falls der Wert 0 oder ein negativer Wert bei P eingegeben ist, werden keine Zeichen gelöscht und eingefügt. Auch hier wird der Ausgang ENO auf den Wert FALSE gesetzt. 
  • Falls der Wert für L und/oder P > die Länge des Strings für IN1 ist, werden keine Zeichen gelöscht oder nur die Zeichen, die im sichtbaren Bereich liegen. Bei P > Länge des Strings wird der neu entstandene String mit Leerzeichen bis vor die Position P aufgefüllt, ab P wird der 2. String eingefügt. Auch hier wird der Ausgang ENO auf den Wert FALSE gesetzt.

(info)  logi.CAD 3  bestimmt die Positionen von Zeichen in einem String so: 1, 2, ..., n. Dabei entspricht 1 dem Zeichen ganz links im String und n der Länge des Strings.
Kombinationen von 3 Zeichen, beginnend mit dem Dollar-Zeichen ($) und gefolgt von 2 Hexadezimal-Ziffern, gelten als ein einziges Zeichen. Beispiel: Der String '$B15' (entspricht '±5') besteht somit aus 2 Zeichen. Weitere Beispiele für diese Kombinationen finden Sie unter →Zeichenfolge-Literal.

Eingänge, Ergebniswert


Bezeichner→DatentypBeschreibung
Eingänge:IN1STRING

1. Eingangswert (= String, in dem ersetzt wird)

IN2STRING2. Eingangswert (= String, der eingefügt wird)
L
USINTUINTUDINTULINTSINTINTDINT oder LINT
(entspricht dem →allgemeinen Datentyp ANY_INT

Anzahl der zu ersetzenden Zeichen

P
USINTUINTUDINTULINTSINTINTDINT oder LINT
(entspricht dem →allgemeinen Datentyp ANY_INT

Startposition im 1. Eingangswert

Ergebniswert:STRING

Der Eingang EN und der Ausgang ENO sind für den →Aufruf des Bausteins verfügbar. Siehe "Ausführungssteuerung: EN, ENO" für Informationen zum Eingang EN und zum Ausgang ENO.

Interne Fehlerdiagnose für Baustein

Der Baustein prüft den vermeintlichen Ergebniswert.
Falls der Ergebniswert im zur Verfügung stehenden Speicher nicht abgebildet werden kann (der Ergebniswert ist zu groß), wird der Ausgang ENO des Bausteins auf den Wert FALSE (oder eine Entsprechung) gesetzt.
Bei diesem Fehlerfall kann noch der folgende Spezialfall auftreten: Falls das Ergebnis des Aufrufs auf eine Variable zugewiesen wird, die auch als Eingangsparameter für den Aufruf dieses Bausteins verwendet wird (siehe folgendes Beispiel), wird in diesem Fehlerfall der Ausgang ENO der umfassenden →POE auf den Wert FALSE gesetzt (jedoch nicht der Ausgang ENO des aufgerufenen Bausteins).
 Beispiel: ResultString := REPLACE(IN1 := 'abc', IN2 := ResultString, L := 2, P := 1); 

Zusätzlich prüft der Baustein die anliegenden Werte, ob auf nicht vorhandene Zeichenpositionen im String zugegriffen wird. Dies ist der Fall, wenn der Wert für L oder P > die Länge des Stringwerts für IN1 ist, ein negativer Wert bei L oder P eingegeben ist oder der Wert 0 bei P eingegeben ist. Auch in diesen Fällen wird der Ausgang ENO des Bausteins auf den Wert FALSE (oder eine Entsprechung) zurückgesetzt.

Beispiel für Verwendung im ST-Editor

PROGRAM Test
    VAR
        result1, result3, result4, result5, result6, result7, result8, result9 : STRING[15];
        result2 : STRING[6];
        CheckENO1, CheckENO2, CheckENO3, CheckENO4, CheckENO5, CheckENO6, CheckENO7, CheckENO8, CheckENO9 : BOOL;
    END_VAR
    result1 := REPLACE(IN1 := 'a string', IN2 := 'call', L := 3, P := 3, ENO => CheckENO1);
               (* The variable 'result1' evaluates to <'a calling'>. The variable 'CheckENO1' evaluates to 'TRUE'. *)
    result2 := REPLACE(IN1 := 'a string', IN2 := 'call', L := 3, P := 3, ENO => CheckENO2);
               (* The variable 'result2' evaluates to <'a call'>. The variable 'CheckENO2' evaluates to 'FALSE'. Reason: 'result2' is declared with length '6' and the would-be return value exceeds this length. *)
    result3 := REPLACE(IN1 := 'a string', IN2 := 'call', L := 0, P := 3, ENO => CheckENO3);
               (* The variable 'result3' evaluates to <'a callstring'>. The variable 'CheckENO3' evaluates to 'TRUE'. *)            
    result4 := REPLACE(IN1 := 'a string', IN2 := 'call', L := -1, P := 2, ENO => CheckENO4);
               (* The variable 'result4' evaluates to <'call string'>. The variable 'CheckENO4' evaluates to 'FALSE'. Reason: negative value for 'L' *)    
    result5 := REPLACE(IN1 := 'a string', IN2 := 'call', L := -3, P := 2, ENO => CheckENO5);
               (* The variable 'result5' evaluates to <'a string'>. The variable 'CheckENO5' evaluates to 'FALSE'. Reason: negative value for 'L' *)    
               (* None of the characters are deleted and inserted because characters outside the visible range would be deleted. *)
    result6 := REPLACE(IN1 := 'a string', IN2 := 'call', L := 3, P := -1, ENO => CheckENO6);
               (* The variable 'result6' evaluates to <'a string'>. The variable 'CheckENO6' evaluates to 'FALSE'. Reason: negative value for 'P' *)             
    result7 := REPLACE(IN1 := 'a string', IN2 := 'call', L := 12, P := 2, ENO => CheckENO7);
               (* The variable 'result7' evaluates to <'acall'>. The variable 'CheckENO7' evaluates to 'FALSE'. Reason: value for 'L' > the length of string 'a string' *)
    result8 := REPLACE(IN1 := 'a string', IN2 := 'call', L := 3, P := 10, ENO => CheckENO8);
               (* The variable 'result8' evaluates to <'a string call'>. The variable 'CheckENO8' evaluates to 'FALSE'. Reason: value for 'P' > the length of string 'a string' *)
    result9 := REPLACE(IN1 := '$B15 deviation', IN2 := '80', L := 1, P := 2, ENO => CheckENO9);
               (* The variable 'result9' evaluates to <'$B180 deviation'>. The variable 'CheckENO9' evaluates to 'TRUE'. *)
END_PROGRAM

Bei der Erstellung Ihrer Anwendung im ST-Editor erstellen Sie den Aufruf eines Bausteins, indem Sie den laut Syntax erforderlichen Text eintippen oder die Inhaltshilfe verwenden.

Falls Zeichen außerhalb des sichtbaren Bereichs gelöscht würden (vor Position 1), werden gar keine Zeichen gelöscht und eingefügt.