Мне нужно объединить несколько строк
Я новичок в структурированном тексте, и я хотел бы знать, как объединить несколько строк. Самый чистый из возможных способов. В этом случае мне нужно изменить только одну переменную при создании строки. У меня есть другой, где мне нужно сделать 2. Это число, вероятно, будет расти. Цель этого состоит в том, чтобы я мог отправить сообщение XML на сервер HTTP. Это для регистрации данных.
В данном случае это переменная читателя, которая является словом.
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Header>
<Action s:mustUnderstand="1" xmlns="http://schemas.microsoft.com/ws/2005/05/addressing/none">http://tempuri.org/IService/receiveHeartbeat</Action>
</s:Header>
<s:Body>
<receiveHeartbeat xmlns="http://tempuri.org/">
<reader>**Word Variable**</reader>
</receiveHeartbeat>
</s:Body>
</s:Envelope>
5 ответов
Вы можете связать
CONCAT
функционирует так:concat3: STRING := CONCAT(CONCAT(str1, str2), str3);
Однако помните, что по умолчанию
STRING
всего 80 символов (байтов). Вы можете указать размер, используя круглые скобки:concat3: STRING(255) := CONCAT(CONCAT(str1, str2), str3);
Но опять же стандарт
CONCAT
функция принимает и возвращает только строки длиной до 255!
Если вам нужны строки длиннее 255, проверьте Работа со строками более 255 символов в документации codeys.
Если вы используете Wago, у вас должен быть доступ к их функциям CONCAT ...CONCAT3(),CONCAT4()...CONCAT9(). Это намного чище, чем вложение многих стандартных функций CONCAT.
// Concatenates from 2 to 9 strings. Unused input vars can be omitted.
FUNCTION CONCAT9 : STRING(255)
VAR_INPUT
str1: STRING;
str2: STRING;
str3: STRING := '';
str4: STRING := '';
str5: STRING := '';
str6: STRING := '';
str7: STRING := '';
str8: STRING := '';
str9: STRING := '';
END_VAR
CONCAT9 := CONCAT(str1, str2);
IF (LEN(str3) = 0) THEN RETURN; END_IF
CONCAT9 := CONCAT(CONCAT9, str3);
IF (LEN(str4) = 0) THEN RETURN; END_IF
CONCAT9 := CONCAT(CONCAT9, str4);
IF (LEN(str5) = 0) THEN RETURN; END_IF
CONCAT9 := CONCAT(CONCAT9, str5);
IF (LEN(str6) = 0) THEN RETURN; END_IF
CONCAT9 := CONCAT(CONCAT9, str6);
IF (LEN(str7) = 0) THEN RETURN; END_IF
CONCAT9 := CONCAT(CONCAT9, str7);
IF (LEN(str8) = 0) THEN RETURN; END_IF
CONCAT9 := CONCAT(CONCAT9, str8);
IF (LEN(str9) = 0) THEN RETURN; END_IF
CONCAT9 := CONCAT(CONCAT9, str9);
Проверки длины позволяют выйти раньше, не делая ненужных операций CONCAT.
Я так понимаю, что вам нужно сделать это в JavaScript.
var replaceDue = "<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\">\
<s:Header>\
<Action s:mustUnderstand=\"1\"xmlns=\"http://schemas.microsoft.com/ws/2005/05/addressing/none\">http://tempuri.org/IService/receiveHeartbeat</Action>\
</s:Header>\
<s:Body>\
<receiveHeartbeat xmlns=\"http://tempuri.org/\">\
<reader>**Word Variable**</reader>\
</receiveHeartbeat>\
</s:Body>\
</s:Envelope>";
var wordVariable = "value to replace";
var replaceDone = replaceDue.replace("**Word Variable**", wordVariable);
Я думаю, что нашел решение. Мне не нравится это все же. Это не очень чисто.
Reader_ID: STRING := '0';
msg: STRING(500);
Msg1: STRING(250) := '<s:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"><s:Header>';
Msg2: STRING(250) := '<Action s:mustUnderstand="1" xmlns="http://schemas.microsoft.com/ws/2005/05/addressing/none">http://tempuri.org/IService/receiveHeartbeat</Action>';
Msg3: STRING := '</s:Header><s:Body><receiveHeartbeat xmlns="http://tempuri.org/"><reader>';
MsgAfter: STRING := '</reader></receiveHeartbeat></s:Body></s:Envelope>';
msg := CONCAT(Msg1,Msg2);
msg := CONCAT(msg,Msg3);
msg := CONCAT(msg,Reader_ID);
msg := CONCAT(msg,MsgAfter);
Кажется, что размеры строк ограничены 500 символами. Суть в том, чтобы создать сообщение XML для отправки через HTTP. Что происходит, когда мои сообщения неизбежно становятся больше, чем 500 символов. Я использую библиотеку WagoLibHttp_02 для http.