Montag, 6. Februar 2023

TIA S7 Replace FB


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




Keine Kommentare:

Kommentar veröffentlichen