Мне нужно объединить несколько строк

Я новичок в структурированном тексте, и я хотел бы знать, как объединить несколько строк. Самый чистый из возможных способов. В этом случае мне нужно изменить только одну переменную при создании строки. У меня есть другой, где мне нужно сделать 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.

Другие вопросы по тегам