我需要连接几个字符串

Posted

技术标签:

【中文标题】我需要连接几个字符串【英文标题】:I need to concatenate several strings 【发布时间】:2015-05-23 01:43:58 【问题描述】:

我是结构化文本的新手,我想知道如何连接多个字符串。最干净的方式。在这个实例中,我只需要在创建字符串时更改一个变量。我还有另一个需要做的事情 2。这个数字可能会增长。这样做的目的是让我可以将 XML 消息发送到 HTTP 服务器。这是用于记录数据。

在这种情况下,reader 变量是一个单词。

<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>

【问题讨论】:

根据目标功能,您可能可以使用记忆功能,例如CoDeSys 中的 SysMemCpy。 【参考方案1】:

你可以像这样链接CONCAT函数:concat3: STRING := CONCAT(CONCAT(str1, str2), str3); 但是,请注意默认情况下STRING 的长度仅为 80 个字符(字节)。您可以使用括号指定大小:concat3: STRING(255) := CONCAT(CONCAT(str1, str2), str3); 但同样,标准的CONCAT 函数只接受并返回长度不超过 255 的字符串!

如果您需要超过 255 的字符串,请查看 codesys 文档中的 Working with Strings More Than 255 Characters

【讨论】:

【参考方案2】:

我认为您需要在 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);

【讨论】:

不像我的问题说我需要在结构化文本中执行此操作。 en.wikipedia.org/wiki/Structured_text 我的错误。我不知道结构化文本。【参考方案3】:

我想我找到了解决办法。不过我不喜欢。不是很干净。

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 个字符时会发生什么。我正在为 http 使用 WagoLibHttp_02 库。

【讨论】:

【参考方案4】:

如果您使用的是 Wago,那么您应该可以访问它们的 CONCAT 函数...CONCAT3()、CONCAT4()...CONCAT9()。这比嵌套很多标准的 CONCAT 函数要干净得多

【讨论】:

以上是关于我需要连接几个字符串的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server 连接字符串“到几个参数”

SQL group by 连接查询结果的字符串

web.config 转换 - 从连接字符串部分删除注释

是否有 CComBSTR 的缓冲版本可以使字符串连接更有效?

MySQL 常用到的几个字符处理函数

你不知道的数据库连接池