<?xml version="1.0" encoding="utf-8"?>
<feed xml:lang="en" xmlns="http://www.w3.org/2005/Atom"><title>Recent posts to Python script to automate 'Find and Replace'</title><link href="https://forge.codesys.com/forge/talk/Engineering/thread/7857f9e0a6/" rel="alternate"/><link href="https://forge.codesys.com/forge/talk/Engineering/thread/7857f9e0a6/feed.atom" rel="self"/><id>https://forge.codesys.com/forge/talk/Engineering/thread/7857f9e0a6/</id><updated>2020-02-27T14:51:56.799000Z</updated><subtitle>Recent posts to Python script to automate 'Find and Replace'</subtitle><entry><title>Python script to automate 'Find and Replace'</title><link href="https://forge.codesys.com/forge/talk/Engineering/thread/7857f9e0a6/?limit=25#c7ab" rel="alternate"/><published>2020-02-27T14:51:56.799000Z</published><updated>2020-02-27T14:51:56.799000Z</updated><author><name>mkeller</name><uri>https://forge.codesys.com/u/mkeller/</uri></author><id>https://forge.codesys.com459a16f715dc004bf84ca4b24dae7a5f969250b8</id><summary type="html">&lt;div class="markdown_content"&gt;&lt;p&gt;Hi swtroelofs.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;swtroelofs hat geschrieben:&lt;/strong&gt;&lt;br/&gt;
Will it use native CODESYS Find and replace functionality, or do I just program a regex search in Python?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Not at the moment but you could use the IScriptTextDocument interface to search and change the Structured Text (ST) parts of the POUs.&lt;/p&gt;
&lt;p&gt;Here some example code for finding the textual parts:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="nv"&gt;def&lt;/span&gt; &lt;span class="nv"&gt;getFullName&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;obj&lt;/span&gt;&lt;span class="ss"&gt;)&lt;/span&gt;:
   &lt;span class="nv"&gt;str&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;""&lt;/span&gt;
   &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="nv"&gt;obj&lt;/span&gt; &lt;span class="nv"&gt;is&lt;/span&gt; &lt;span class="nv"&gt;not&lt;/span&gt; &lt;span class="nv"&gt;None&lt;/span&gt; &lt;span class="nv"&gt;and&lt;/span&gt; &lt;span class="nv"&gt;not&lt;/span&gt; &lt;span class="nv"&gt;obj&lt;/span&gt;.&lt;span class="nv"&gt;is_root&lt;/span&gt;:
      &lt;span class="nv"&gt;str&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;obj&lt;/span&gt;.&lt;span class="nv"&gt;get_name&lt;/span&gt;&lt;span class="ss"&gt;()&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;.&lt;/span&gt;&lt;span class="s1"&gt;'&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nv"&gt;str&lt;/span&gt;
      &lt;span class="nv"&gt;obj&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;obj&lt;/span&gt;.&lt;span class="nv"&gt;parent&lt;/span&gt;
   &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nv"&gt;str&lt;/span&gt;
&lt;span class="nv"&gt;proj&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;projects&lt;/span&gt;.&lt;span class="nv"&gt;primary&lt;/span&gt;
\# &lt;span class="nv"&gt;Iterate&lt;/span&gt; &lt;span class="nv"&gt;through&lt;/span&gt; &lt;span class="nv"&gt;all&lt;/span&gt; &lt;span class="nv"&gt;children&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;project&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="nv"&gt;child&lt;/span&gt; &lt;span class="nv"&gt;in&lt;/span&gt; &lt;span class="nv"&gt;proj&lt;/span&gt;.&lt;span class="nv"&gt;get_children&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;True&lt;/span&gt;&lt;span class="ss"&gt;)&lt;/span&gt;:
   &lt;span class="nv"&gt;hasDecl&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;child&lt;/span&gt;.&lt;span class="nv"&gt;has_textual_declaration&lt;/span&gt;
   &lt;span class="nv"&gt;hasImpl&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;child&lt;/span&gt;.&lt;span class="nv"&gt;has_textual_implementation&lt;/span&gt;
   &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nv"&gt;hasDecl&lt;/span&gt; &lt;span class="nv"&gt;or&lt;/span&gt; &lt;span class="nv"&gt;hasImpl&lt;/span&gt;:
      &lt;span class="nv"&gt;print&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;=== Object with text: {} declaration={} implementation={}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;.&lt;span class="nv"&gt;format&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;getFullName&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;child&lt;/span&gt;&lt;span class="ss"&gt;)&lt;/span&gt;, &lt;span class="nv"&gt;hasDecl&lt;/span&gt;, &lt;span class="nv"&gt;hasImpl&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;hasDecl&lt;/span&gt;:
         &lt;span class="nv"&gt;declaration&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;child&lt;/span&gt;.&lt;span class="nv"&gt;textual_declaration&lt;/span&gt;
         &lt;span class="nv"&gt;print&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Length of declaration: &lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nv"&gt;str&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;declaration&lt;/span&gt;.&lt;span class="nv"&gt;length&lt;/span&gt;&lt;span class="ss"&gt;))&lt;/span&gt;
         &lt;span class="nv"&gt;print&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Content of declaration:&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;&amp;lt;code&amp;gt;&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="ss"&gt;)&lt;/span&gt;
         &lt;span class="nv"&gt;print&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;declaration&lt;/span&gt;.&lt;span class="nv"&gt;text&lt;/span&gt;&lt;span class="ss"&gt;)&lt;/span&gt;
         &lt;span class="nv"&gt;print&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;&amp;lt;/code&amp;gt;&lt;/span&gt;&lt;span class="s2"&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;hasImpl&lt;/span&gt;:
         &lt;span class="nv"&gt;implementation&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;child&lt;/span&gt;.&lt;span class="nv"&gt;textual_implementation&lt;/span&gt;
         &lt;span class="nv"&gt;print&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Length of implementation: &lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nv"&gt;str&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;implementation&lt;/span&gt;.&lt;span class="nv"&gt;length&lt;/span&gt;&lt;span class="ss"&gt;))&lt;/span&gt;
         &lt;span class="nv"&gt;print&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Content of implementation:&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;&amp;lt;code&amp;gt;&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="ss"&gt;)&lt;/span&gt;
         &lt;span class="nv"&gt;print&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;implementation&lt;/span&gt;.&lt;span class="nv"&gt;text&lt;/span&gt;&lt;span class="ss"&gt;)&lt;/span&gt;
         &lt;span class="nv"&gt;print&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;&amp;lt;/code&amp;gt;&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="ss"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;To change the content of a textual part you use the method . There are more methods you can use, see the Scripting API documentation.&lt;/p&gt;
&lt;p&gt;BR&lt;br/&gt;
Martin&lt;/p&gt;&lt;/div&gt;</summary></entry><entry><title>Python script to automate 'Find and Replace'</title><link href="https://forge.codesys.com/forge/talk/Engineering/thread/7857f9e0a6/?limit=25#53cd" rel="alternate"/><published>2020-02-27T14:51:55.222000Z</published><updated>2020-02-27T14:51:55.222000Z</updated><author><name>swtroelofs</name><uri>https://forge.codesys.com/u/swtroelofs/</uri></author><id>https://forge.codesys.com9cfcc9cad232d10069ef4226a986df025dc1c3ce</id><summary type="html">&lt;div class="markdown_content"&gt;&lt;p&gt;Hi all,&lt;/p&gt;
&lt;p&gt;I'm new to Python scripts and I am wondering if this is possible to script:&lt;/p&gt;
&lt;p&gt;Before finishing a project I always run a couple of Find and Replace actions (with regex), for example:&lt;br/&gt;
Find: &lt;span&gt;[\t ]&lt;/span&gt;+(\n)&lt;br/&gt;
Replace: $1&lt;/p&gt;
&lt;p&gt;Can I make a Python script that automates this process? So it runs a couple of Find and replace actions in a row?&lt;/p&gt;
&lt;p&gt;Will it use native CODESYS Find and replace functionality, or do I just program a regex search in Python?&lt;/p&gt;
&lt;p&gt;Thanks&lt;/p&gt;&lt;/div&gt;</summary></entry></feed>