Mit dem Funktionsblock "Replace" kann ein String in einer Zeichenkette gesucht und ersetzt werden. Der String wird komplett durchsucht und alle ersetzt. Es ist egal wie oft der String vorkommt und an welcher Position er steht.
Beispiel:
- Input_String = 'Hallo110Hallo210Hallo310Hallo4'
- Find_String = '10'
- Replace_String = 'Du'
- Output_String = 'Hallo1DuHallo2DuHallo3DuHallo4'
FUNCTION_BLOCK "Replace"
{ S7_Optimized_Access := 'TRUE' }
VERSION : 0.1
VAR_INPUT
Input_String : String;
Find_String : String;
Replace_String : String;
END_VAR
VAR_OUTPUT
Out_String : String;
END_VAR
VAR_TEMP
temp : String;
temp_Position : Int;
temp_Left : String;
temp_Right : String;
END_VAR
BEGIN
IF LEN(#Input_String) = 0 THEN
RETURN;
END_IF;
IF LEN(#Find_String) = 0 THEN
RETURN;
END_IF;
#temp := #Input_String;
IF FIND(IN1 := #temp, IN2 := #Find_String) = 0 THEN
#Out_String := #temp;
RETURN;
END_IF;
WHILE FIND(IN1 := #temp, IN2 := #Find_String) > 0 DO
#temp_Position := FIND(IN1 := #temp, IN2 := #Find_String);
IF #temp_Position > 1 THEN
#temp_Left := LEFT(IN := #temp, L := #temp_Position - 1);
ELSE
#temp_Left := '';
END_IF;
IF #temp_Position + LEN(#Find_String) = LEN(#temp) +1 THEN
#temp_Right := '';
ELSE
#temp_Right := RIGHT(IN := #temp, L := LEN(#temp) - #temp_Position - LEN(#Find_String) + 1);
END_IF;
#temp := CONCAT(IN1 := #temp_Left, IN2 := #Replace_String, IN3 := #temp_Right );
END_WHILE;
#Out_String := #temp;
END_FUNCTION_BLOCK