<?xml version="1.0" encoding="utf-8"?>
<feed xml:lang="en" xmlns="http://www.w3.org/2005/Atom"><title>Recent posts to Equivalent to printf in ST</title><link href="https://forge.codesys.com/forge/talk/CODESYS-V2/thread/9562afb80d/" rel="alternate"/><link href="https://forge.codesys.com/forge/talk/CODESYS-V2/thread/9562afb80d/feed.atom" rel="self"/><id>https://forge.codesys.com/forge/talk/CODESYS-V2/thread/9562afb80d/</id><updated>2020-02-27T23:28:17.159000Z</updated><subtitle>Recent posts to Equivalent to printf in ST</subtitle><entry><title>Equivalent to printf in ST</title><link href="https://forge.codesys.com/forge/talk/Codesys%2520V2.3/thread/9562afb80d/?limit=25#bf50" rel="alternate"/><published>2020-02-27T23:28:17.159000Z</published><updated>2020-02-27T23:28:17.159000Z</updated><author><name>Andreaz</name><uri>https://forge.codesys.com/u/andreaz/</uri></author><id>https://forge.codesys.com75b9935db2fe4f75fe150e000a1f8d80d1bc0bed</id><summary type="html">&lt;div class="markdown_content"&gt;&lt;p&gt;There is no variant types in codesys so creating a real printf with placeholders like %.3f and so will be tricky.&lt;/p&gt;
&lt;p&gt;I have made this function though that takes a input string and replaces all # characters with a value.&lt;/p&gt;
&lt;p&gt;Note that this is written for CodeSys 3 so uses // as comments.&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="nv"&gt;FUNCTION&lt;/span&gt; &lt;span class="nv"&gt;FormatString&lt;/span&gt; : &lt;span class="nv"&gt;STRING&lt;/span&gt;
&lt;span class="nv"&gt;VAR_INPUT&lt;/span&gt;
   &lt;span class="nv"&gt;Format&lt;/span&gt;: &lt;span class="nv"&gt;POINTER&lt;/span&gt; &lt;span class="nv"&gt;TO&lt;/span&gt; &lt;span class="nv"&gt;STRING&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;
   &lt;span class="nv"&gt;Value&lt;/span&gt; : &lt;span class="nv"&gt;POINTER&lt;/span&gt; &lt;span class="nv"&gt;TO&lt;/span&gt; &lt;span class="nv"&gt;STRING&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;
&lt;span class="nv"&gt;END_VAR&lt;/span&gt;
&lt;span class="nv"&gt;VAR&lt;/span&gt;
   &lt;span class="nv"&gt;CurResult&lt;/span&gt;: &lt;span class="nv"&gt;POINTER&lt;/span&gt; &lt;span class="nv"&gt;TO&lt;/span&gt; &lt;span class="nv"&gt;BYTE&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;
   &lt;span class="nv"&gt;CurValue&lt;/span&gt; : &lt;span class="nv"&gt;POINTER&lt;/span&gt; &lt;span class="nv"&gt;TO&lt;/span&gt; &lt;span class="nv"&gt;BYTE&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;
&lt;span class="nv"&gt;END_VAR&lt;/span&gt;
&lt;span class="o"&gt;//&lt;/span&gt; &lt;span class="nv"&gt;Make&lt;/span&gt; &lt;span class="nv"&gt;a&lt;/span&gt; &lt;span class="nv"&gt;copy&lt;/span&gt; &lt;span class="nv"&gt;of&lt;/span&gt; &lt;span class="nv"&gt;the&lt;/span&gt; &lt;span class="nv"&gt;input&lt;/span&gt; &lt;span class="nv"&gt;string&lt;/span&gt;
&lt;span class="nv"&gt;FormatString&lt;/span&gt;:&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;Format&lt;/span&gt;&lt;span class="o"&gt;^&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;
&lt;span class="nv"&gt;CurValue&lt;/span&gt; :&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;Value&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;
&lt;span class="nv"&gt;CurResult&lt;/span&gt;:&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;ADR&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;FormatString&lt;/span&gt;&lt;span class="ss"&gt;)&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;WHILE&lt;/span&gt; &lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;CurResult&lt;/span&gt;&lt;span class="o"&gt;^&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="ss"&gt;)&lt;/span&gt; &lt;span class="nv"&gt;AND&lt;/span&gt; &lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;CurValue&lt;/span&gt;&lt;span class="o"&gt;^&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="ss"&gt;)&lt;/span&gt; &lt;span class="k"&gt;DO&lt;/span&gt;
   
   &lt;span class="o"&gt;//&lt;/span&gt; &lt;span class="nv"&gt;Found&lt;/span&gt; &lt;span class="nv"&gt;a&lt;/span&gt; &lt;span class="nv"&gt;placeholder&lt;/span&gt; &lt;span class="ss"&gt;(&lt;/span&gt;#&lt;span class="ss"&gt;)&lt;/span&gt;
   &lt;span class="k"&gt;IF&lt;/span&gt; &lt;span class="nv"&gt;CurResult&lt;/span&gt;&lt;span class="o"&gt;^&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;35&lt;/span&gt; &lt;span class="k"&gt;THEN&lt;/span&gt;
      &lt;span class="nv"&gt;CurResult&lt;/span&gt;&lt;span class="o"&gt;^&lt;/span&gt;:&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;CurValue&lt;/span&gt;&lt;span class="o"&gt;^&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;
      &lt;span class="nv"&gt;CurValue&lt;/span&gt;:&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;CurValue&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="c1"&gt;;      &lt;/span&gt;
   &lt;span class="nv"&gt;END_IF&lt;/span&gt;&lt;span class="c1"&gt;;   &lt;/span&gt;
   
   &lt;span class="nv"&gt;CurResult&lt;/span&gt;:&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;CurResult&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;
&lt;span class="nv"&gt;END_WHILE&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Example:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="nt"&gt;a&lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="s1"&gt;'Hello ####'&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="nt"&gt;b&lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="s1"&gt;'World'&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="nt"&gt;c&lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="nt"&gt;FormatString&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;Adr&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;a&lt;/span&gt;&lt;span class="o"&gt;),&lt;/span&gt; &lt;span class="nt"&gt;Adr&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;b&lt;/span&gt;&lt;span class="o"&gt;));&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;String c will contain "Hello World" after this.&lt;/p&gt;
&lt;p&gt;Note that if there are more # in the format string then the value it wont replace them with spaces. It would be an idea to add code for replacing the remaining, connected # with spaces.&lt;/p&gt;&lt;/div&gt;</summary></entry><entry><title>Equivalent to printf in ST</title><link href="https://forge.codesys.com/forge/talk/Codesys%2520V2.3/thread/9562afb80d/?limit=25#2a12" rel="alternate"/><published>2020-02-27T23:28:15.520000Z</published><updated>2020-02-27T23:28:15.520000Z</updated><author><name>williamc</name><uri>https://forge.codesys.com/u/williamc/</uri></author><id>https://forge.codesys.com3e0a2996fea5ecd14d1f2d30dbb667768462494b</id><summary type="html">&lt;div class="markdown_content"&gt;&lt;p&gt;UDP - are you talking about User Datagram Protocol...can't quite see the relevance with writing several strings into a single string.&lt;/p&gt;
&lt;p&gt;Could you elaborate???&lt;/p&gt;&lt;/div&gt;</summary></entry><entry><title>Equivalent to printf in ST</title><link href="https://forge.codesys.com/forge/talk/Codesys%2520V2.3/thread/9562afb80d/?limit=25#0660" rel="alternate"/><published>2020-02-27T23:28:10.954000Z</published><updated>2020-02-27T23:28:10.954000Z</updated><author><name>alex87</name><uri>https://forge.codesys.com/u/alex87/</uri></author><id>https://forge.codesys.com5afd7c9e11a3355697f27cecfc53e0fe030c1153</id><summary type="html">&lt;div class="markdown_content"&gt;&lt;p&gt;Use a simple UDP protocol.&lt;/p&gt;
&lt;p&gt;Alex&lt;/p&gt;&lt;/div&gt;</summary></entry><entry><title>Equivalent to printf in ST</title><link href="https://forge.codesys.com/forge/talk/Codesys%2520V2.3/thread/9562afb80d/?limit=25#2d2f" rel="alternate"/><published>2020-02-27T23:28:09.318000Z</published><updated>2020-02-27T23:28:09.318000Z</updated><author><name>williamc</name><uri>https://forge.codesys.com/u/williamc/</uri></author><id>https://forge.codesys.coma817e6194a9c8dca51a366ba0cff064620234272</id><summary type="html">&lt;div class="markdown_content"&gt;&lt;p&gt;Hi is there an equivalent to printf in Structured Text. I have to currently create strings by nested CONCAT statements. &lt;/p&gt;
&lt;p&gt;Is there a better way?&lt;/p&gt;&lt;/div&gt;</summary></entry></feed>