Copier les caractères à partir d’une position centrale
MID copie L caractères de la chaîne de caractères de la variable d’entrée IN, en commençant par la position P, 1 désignant la position du premier caractère de la chaîne de caractères. Le résultat est écrit dans la variable de sortie.
Entrée
Chaîne de caractères d’entrée
Nombre de caractères de la chaîne de caractères d’entrée qui sont copiés
Position de départ de la chaîne de caractères d’entrée copiée, 1 étant le premier caractère de la chaîne de caractères
Sortie
Chaîne de caractères copiée
Si cette instruction est utilisée avec des chaînes de caractères en UTF-8, consultez les remarques concernant les chaînes de caractères en UTF-8 sous “STRING”.
La somme de la position de départ et du nombre de caractères devant être copiés, ne doit pas être supérieure à la chaîne de caractères d’entrée. Si par exemple vous souhaitez que 5 caractères d’une chaîne de caractères de 10 caractères soient renvoyées à partir de la position 7, seuls les 4 derniers caractères seront copiés.
Si la chaîne de caractères de sortie est d’une longueur supérieure à celle définie pour la variable de sortie dans la zone Type, seul le nombre de caractères pouvant être contenu dans la variable de sortie sera copié.La variable système sys_bIsCarry est activée.
Si une chaîne de caractères en entrée ou sortie est invalide.
Si une chaîne de caractères en entrée ou sortie est invalide.
Si la chaîne de caractères de sortie est d’une longueur supérieure à celle définie pour la variable de sortie dans la zone "Type"
Toutes les variables d’entrée et de sortie utilisées pour programmer cette fonction ont été déclarées dans l’en-tête du POU. Le même en-tête de POU est utilisé pour tous les langages de programmation.
VAR
sInputString: STRING[32]:='A better life. A better world.';
(*sample string*)
iNumberOfCharacters: INT:=15;
(*characters to be delivered*)
iStartPos: INT:=16;
(*position to start copying*)
sResultString: STRING[15]:='';
(*result here: 'A better world.'*)
END_VAR
Dans cet exemple, les variables d’entrée (sInputString, iNumberOfCharacters et iStartPos) ont été déclarées. Vous pouvez également entrer la chaîne de caractères, le nombre de caractères devant être copiés et la position de départ directement dans la fonction. La chaîne de caractères doit être entrée entre guillemets, à la fois dans l’en-tête du POU et dans la fonction.
iNumberOfCharacters (15) désigne le nombre de caractères de sInputString qui sont copiés à partir de la position iStartPos (16) en sortie sResultString.
BODY
WORKSPACE
NETWORK_LIST_TYPE := NWTYPELD ;
ACTIVE_NETWORK := 0 ;
END_WORKSPACE
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 5 ;
NETWORK_BODY
B(B_F,MID!,,22,0,27,5,,?DIN?DL?DP?C);
B(B_VARIN,,sInputString,20,1,22,3,);
B(B_VARIN,,iNumberOfCharacters,20,2,22,4,);
B(B_VARIN,,iStartPos,20,3,22,5,);
B(B_VAROUT,,sResultString,27,1,29,3,);
L(1,0,1,5);
END_NETWORK_BODY
END_NET_WORK
END_BODY
sResultString:=MID(IN:=sInputString, L:=iNumberOfCharacters, P:=iStartPos);