User to user discussion and support for UltraEdit, UEStudio, UltraCompare, and other IDM applications.

Help with writing and playing macros
4 posts Page 1 of 1
I need a macro that will put values starting from 1 to required number sequentially (i.e. col# will be col1 then col2 and so on and it will start from col1 in every "<row>...</row>"

In details, sample 1 will become sample 2.

Sample 1:
Code: Select all
<tabular xml:id="jofi844-tbl-0001" pRights="unknown" eRights="yes">
<title type="main">TABLE 1 S<sc>ecurity</sc> O<sc>fferings of</sc> U.S. B<sc>usiness</sc> C<sc>orporations</sc> 1950&#x2013;1965</title>
<table frame="topbot" colsep="0" rowsep="0" pgwide="1">
<tgroup cols="7">
<colspec colnum="1" colname="col1" align="left"/>
<colspec colnum="2" colname="col2" align="left"/>
<colspec colnum="3" colname="col3" align="left"/>
<colspec colnum="4" colname="col4" align="left"/>
<colspec colnum="5" colname="col5" align="left"/>
<colspec colnum="6" colname="col6" align="left"/>
<colspec colnum="7" colname="col7" align="left"/>
<thead><row>
<entry colname="col#" valign="bottom">Year</entry>
<entry colname="col#" valign="bottom">Total Corporate Securities Issued<link href="#jofi844-tbl-note-0001"><sup>a</sup></link></entry>
<entry colname="col#" valign="bottom">Total Common Stock Issued<link href="#jofi844-tbl-note-0002"><sup>b</sup></link></entry>
<entry colname="col#" valign="bottom">Total Preferred Stock Issued<link href="#jofi844-tbl-note-0002"><sup>c</sup></link></entry>
<entry colname="col#" valign="bottom">Non-Convertible Preferred Stock Issued<link href="#jofi844-tbl-note-0003"><sup>d</sup></link></entry>
<entry colname="col#" valign="bottom">Non-Convertible as a Per Cent of Total Corporate Securities</entry>
<entry colname="col#" valign="bottom">Non-Convertible as a Per Cent of Total Preferred</entry>
</row></thead>
<tbody>
<row>
<entry colname="col#"/>
<entry colname="col#"/>
<entry colname="col#"/>
<entry colname="col#"/>
<entry colname="col#"/>
<entry colname="col#"><math display="inline" xmlns="http://www.w3.org/1998/Math/MathML" altimg="urn:x-wiley:00221082:jofi844:equation:jofi844-math-0001" wiley:location="equation/jofi844-math-0001.png">$\left(\underline {4} \right)$</math></entry>
<entry colname="col#"><math display="inline" xmlns="http://www.w3.org/1998/Math/MathML" altimg="urn:x-wiley:00221082:jofi844:equation:jofi844-math-0002" wiley:location="equation/jofi844-math-0002.png">$\left(\underline {4} \right)$</math></entry>
</row>
<row>
<entry colname="col#"/>
<entry colname="col#">(1)</entry>
<entry colname="col#">(2)</entry>
<entry colname="col#">(3)</entry>
<entry colname="col#">(4)</entry>
<entry colname="col#">(1)</entry>
<entry colname="col#">(3)</entry>
</row>
<row>
<entry colname="col#">1950</entry>
<entry colname="col#">&#x0024; 6,361</entry>
<entry colname="col#">&#x0024; 810</entry>
<entry colname="col#">&#x0024; 630</entry>
<entry colname="col#">&#x0024; 409</entry>
<entry colname="col#">6.4&#x0025;</entry>
<entry colname="col#">64.9&#x0025;</entry>
</row>
<row>
<entry colname="col#">1951</entry>
<entry colname="col#">7,741</entry>
<entry colname="col#">1,216</entry>
<entry colname="col#">837</entry>
<entry colname="col#">271</entry>
<entry colname="col#">3.5</entry>
<entry colname="col#">32.4</entry>
</row>
<row>
<entry colname="col#">1952</entry>
<entry colname="col#">9,534</entry>
<entry colname="col#">1,368</entry>
<entry colname="col#">564</entry>
<entry colname="col#">268</entry>
<entry colname="col#">2.8</entry>
<entry colname="col#">47.5</entry>
</row>
<row>
<entry colname="col#">1953</entry>
<entry colname="col#">8,898</entry>
<entry colname="col#">1,326</entry>
<entry colname="col#">488</entry>
<entry colname="col#">382</entry>
<entry colname="col#">4.3</entry>
<entry colname="col#">78.3</entry>
</row>
<row>
<entry colname="col#">1954</entry>
<entry colname="col#">9,516</entry>
<entry colname="col#">1,213</entry>
<entry colname="col#">816</entry>
<entry colname="col#">518</entry>
<entry colname="col#">5.4</entry>
<entry colname="col#">63.5</entry>
</row>
<row>
<entry colname="col#">1955</entry>
<entry colname="col#">10,240</entry>
<entry colname="col#">2,185</entry>
<entry colname="col#">635</entry>
<entry colname="col#">388</entry>
<entry colname="col#">3.8</entry>
<entry colname="col#">61.1</entry>
</row>
<row>
<entry colname="col#">1956</entry>
<entry colname="col#">10,939</entry>
<entry colname="col#">2,301</entry>
<entry colname="col#">636</entry>
<entry colname="col#">319</entry>
<entry colname="col#">2.9</entry>
<entry colname="col#">50.2</entry>
</row>
<row>
<entry colname="col#">1957</entry>
<entry colname="col#">12,884</entry>
<entry colname="col#">2,516</entry>
<entry colname="col#">411</entry>
<entry colname="col#">216</entry>
<entry colname="col#">1.7</entry>
<entry colname="col#">52.6</entry>
</row>
<row>
<entry colname="col#">1958</entry>
<entry colname="col#">11,558</entry>
<entry colname="col#">1,334</entry>
<entry colname="col#">571</entry>
<entry colname="col#">372</entry>
<entry colname="col#">3.2</entry>
<entry colname="col#">65.1</entry>
</row>
<row>
<entry colname="col#">1959</entry>
<entry colname="col#">9,748</entry>
<entry colname="col#">2,027</entry>
<entry colname="col#">531</entry>
<entry colname="col#">238</entry>
<entry colname="col#">2.4</entry>
<entry colname="col#">44.8</entry>
</row>
<row>
<entry colname="col#">1960</entry>
<entry colname="col#">10,154</entry>
<entry colname="col#">1,664</entry>
<entry colname="col#">409</entry>
<entry colname="col#">335</entry>
<entry colname="col#">3.3</entry>
<entry colname="col#">81.9</entry>
</row>
<row>
<entry colname="col#">1961</entry>
<entry colname="col#">13,165</entry>
<entry colname="col#">3,294</entry>
<entry colname="col#">449</entry>
<entry colname="col#">255</entry>
<entry colname="col#">1.9</entry>
<entry colname="col#">56.8</entry>
</row>
<row>
<entry colname="col#">1962</entry>
<entry colname="col#">10,705</entry>
<entry colname="col#">1,314</entry>
<entry colname="col#">422</entry>
<entry colname="col#">202</entry>
<entry colname="col#">1.9</entry>
<entry colname="col#">47.9</entry>
</row>
<row>
<entry colname="col#">1963</entry>
<entry colname="col#">12,237</entry>
<entry colname="col#">1,022</entry>
<entry colname="col#">342</entry>
<entry colname="col#">245</entry>
<entry colname="col#">2.0</entry>
<entry colname="col#">71.6</entry>
</row>
<row>
<entry colname="col#">1964</entry>
<entry colname="col#">13,957</entry>
<entry colname="col#">2,679</entry>
<entry colname="col#">412</entry>
<entry colname="col#">279</entry>
<entry colname="col#">2.0</entry>
<entry colname="col#">67.7</entry>
</row>
<row>
<entry colname="col#">1965</entry>
<entry colname="col#" rowsep="1">15,992</entry>
<entry colname="col#" rowsep="1">1,547</entry>
<entry colname="col#" rowsep="1">725</entry>
<entry colname="col#" rowsep="1">449</entry>
<entry colname="col#">2.8</entry>
<entry colname="col#">61.9</entry>
</row>
<row>
<entry colname="col#">Totals</entry>
<entry colname="col#">&#x0024;173,629</entry>
<entry colname="col#">&#x0024;27,716</entry>
<entry colname="col#">&#x0024;8,878</entry>
<entry colname="col#">&#x0024;5,146</entry>
<entry colname="col#"/>
<entry colname="col#"/></row>
</tbody>
</tgroup>
</table>
<noteGroup xml:id="jofi844-ntgp-0002">
<note xml:id="jofi844-tbl-note-0001">
<label>a</label><p>1950&#x2013;1954, <i>Federal Reserve Bulletin</i>., January, 1957, p. 62. 1955&#x2013;1961, <i>Federal Reserve Bulletin</i>., June, 1963, p. 829. 1962&#x2013;1965, <i>Federal Reserve Bulletin</i>., June, 1966, p. 867.</p>
</note>
<note xml:id="jofi844-tbl-note-0002">
<label>b,c</label><p>Estimates of the Securities and Exchange Commission as reported in the <i>Federal Reserve Bulletin</i>., June, 1953, p. 634; December, 1961, p. 1450; April, 1962, p. 446; and June, 1966, p. 867.</p>
</note>
<note xml:id="jofi844-tbl-note-0003">
<label>d</label><p>Refer to Footnote 4.</p>
</note>
</noteGroup>
</tabular>

Sample 2:
Code: Select all
<tabular xml:id="jofi844-tbl-0001" pRights="unknown" eRights="yes">
<title type="main">TABLE 1 S<sc>ecurity</sc> O<sc>fferings of</sc> U.S. B<sc>usiness</sc> C<sc>orporations</sc> 1950&#x2013;1965</title>
<table frame="topbot" colsep="0" rowsep="0" pgwide="1">
<tgroup cols="7">
<colspec colnum="1" colname="col1" align="left"/>
<colspec colnum="2" colname="col2" align="left"/>
<colspec colnum="3" colname="col3" align="left"/>
<colspec colnum="4" colname="col4" align="left"/>
<colspec colnum="5" colname="col5" align="left"/>
<colspec colnum="6" colname="col6" align="left"/>
<colspec colnum="7" colname="col7" align="left"/>
<thead><row>
<entry colname="col1" valign="bottom">Year</entry>
<entry colname="col2" valign="bottom">Total Corporate Securities Issued<link href="#jofi844-tbl-note-0001"><sup>a</sup></link></entry>
<entry colname="col3" valign="bottom">Total Common Stock Issued<link href="#jofi844-tbl-note-0002"><sup>b</sup></link></entry>
<entry colname="col4" valign="bottom">Total Preferred Stock Issued<link href="#jofi844-tbl-note-0002"><sup>c</sup></link></entry>
<entry colname="col5" valign="bottom">Non-Convertible Preferred Stock Issued<link href="#jofi844-tbl-note-0003"><sup>d</sup></link></entry>
<entry colname="col6" valign="bottom">Non-Convertible as a Per Cent of Total Corporate Securities</entry>
<entry colname="col7" valign="bottom">Non-Convertible as a Per Cent of Total Preferred</entry>
</row></thead>
<tbody>
<row>
<entry colname="col1"/>
<entry colname="col2"/>
<entry colname="col3"/>
<entry colname="col4"/>
<entry colname="col5"/>
<entry colname="col6"><math display="inline" xmlns="http://www.w3.org/1998/Math/MathML" altimg="urn:x-wiley:00221082:jofi844:equation:jofi844-math-0001" wiley:location="equation/jofi844-math-0001.png">$\left(\underline {4} \right)$</math></entry>
<entry colname="col7"><math display="inline" xmlns="http://www.w3.org/1998/Math/MathML" altimg="urn:x-wiley:00221082:jofi844:equation:jofi844-math-0002" wiley:location="equation/jofi844-math-0002.png">$\left(\underline {4} \right)$</math></entry>
</row>
<row>
<entry colname="col1"/>
<entry colname="col2">(1)</entry>
<entry colname="col3">(2)</entry>
<entry colname="col4">(3)</entry>
<entry colname="col5">(4)</entry>
<entry colname="col6">(1)</entry>
<entry colname="col7">(3)</entry>
</row>
<row>
<entry colname="col1">1950</entry>
<entry colname="col2">&#x0024; 6,361</entry>
<entry colname="col3">&#x0024; 810</entry>
<entry colname="col4">&#x0024; 630</entry>
<entry colname="col5">&#x0024; 409</entry>
<entry colname="col6">6.4&#x0025;</entry>
<entry colname="col7">64.9&#x0025;</entry>
</row>
<row>
<entry colname="col1">1951</entry>
<entry colname="col2">7,741</entry>
<entry colname="col3">1,216</entry>
<entry colname="col4">837</entry>
<entry colname="col5">271</entry>
<entry colname="col6">3.5</entry>
<entry colname="col7">32.4</entry>
</row>
<row>
<entry colname="col1">1952</entry>
<entry colname="col2">9,534</entry>
<entry colname="col3">1,368</entry>
<entry colname="col4">564</entry>
<entry colname="col5">268</entry>
<entry colname="col6">2.8</entry>
<entry colname="col7">47.5</entry>
</row>
<row>
<entry colname="col1">1953</entry>
<entry colname="col2">8,898</entry>
<entry colname="col3">1,326</entry>
<entry colname="col4">488</entry>
<entry colname="col5">382</entry>
<entry colname="col6">4.3</entry>
<entry colname="col7">78.3</entry>
</row>
<row>
<entry colname="col1">1954</entry>
<entry colname="col2">9,516</entry>
<entry colname="col3">1,213</entry>
<entry colname="col4">816</entry>
<entry colname="col5">518</entry>
<entry colname="col6">5.4</entry>
<entry colname="col7">63.5</entry>
</row>
<row>
<entry colname="col1">1955</entry>
<entry colname="col2">10,240</entry>
<entry colname="col3">2,185</entry>
<entry colname="col4">635</entry>
<entry colname="col5">388</entry>
<entry colname="col6">3.8</entry>
<entry colname="col7">61.1</entry>
</row>
<row>
<entry colname="col1">1956</entry>
<entry colname="col2">10,939</entry>
<entry colname="col3">2,301</entry>
<entry colname="col4">636</entry>
<entry colname="col5">319</entry>
<entry colname="col6">2.9</entry>
<entry colname="col7">50.2</entry>
</row>
<row>
<entry colname="col1">1957</entry>
<entry colname="col2">12,884</entry>
<entry colname="col3">2,516</entry>
<entry colname="col4">411</entry>
<entry colname="col5">216</entry>
<entry colname="col6">1.7</entry>
<entry colname="col7">52.6</entry>
</row>
<row>
<entry colname="col1">1958</entry>
<entry colname="col2">11,558</entry>
<entry colname="col3">1,334</entry>
<entry colname="col4">571</entry>
<entry colname="col5">372</entry>
<entry colname="col6">3.2</entry>
<entry colname="col7">65.1</entry>
</row>
<row>
<entry colname="col1">1959</entry>
<entry colname="col2">9,748</entry>
<entry colname="col3">2,027</entry>
<entry colname="col4">531</entry>
<entry colname="col5">238</entry>
<entry colname="col6">2.4</entry>
<entry colname="col7">44.8</entry>
</row>
<row>
<entry colname="col1">1960</entry>
<entry colname="col2">10,154</entry>
<entry colname="col3">1,664</entry>
<entry colname="col4">409</entry>
<entry colname="col5">335</entry>
<entry colname="col6">3.3</entry>
<entry colname="col7">81.9</entry>
</row>
<row>
<entry colname="col1">1961</entry>
<entry colname="col2">13,165</entry>
<entry colname="col3">3,294</entry>
<entry colname="col4">449</entry>
<entry colname="col5">255</entry>
<entry colname="col6">1.9</entry>
<entry colname="col7">56.8</entry>
</row>
<row>
<entry colname="col1">1962</entry>
<entry colname="col2">10,705</entry>
<entry colname="col3">1,314</entry>
<entry colname="col4">422</entry>
<entry colname="col5">202</entry>
<entry colname="col6">1.9</entry>
<entry colname="col7">47.9</entry>
</row>
<row>
<entry colname="col1">1963</entry>
<entry colname="col2">12,237</entry>
<entry colname="col3">1,022</entry>
<entry colname="col4">342</entry>
<entry colname="col5">245</entry>
<entry colname="col6">2.0</entry>
<entry colname="col7">71.6</entry>
</row>
<row>
<entry colname="col1">1964</entry>
<entry colname="col2">13,957</entry>
<entry colname="col3">2,679</entry>
<entry colname="col4">412</entry>
<entry colname="col5">279</entry>
<entry colname="col6">2.0</entry>
<entry colname="col7">67.7</entry>
</row>
<row>
<entry colname="col1">1965</entry>
<entry colname="col2" rowsep="1">15,992</entry>
<entry colname="col3" rowsep="1">1,547</entry>
<entry colname="col4" rowsep="1">725</entry>
<entry colname="col5" rowsep="1">449</entry>
<entry colname="col6">2.8</entry>
<entry colname="col7">61.9</entry>
</row>
<row>
<entry colname="col1">Totals</entry>
<entry colname="col2">&#x0024;173,629</entry>
<entry colname="col3">&#x0024;27,716</entry>
<entry colname="col4">&#x0024;8,878</entry>
<entry colname="col5">&#x0024;5,146</entry>
<entry colname="col6"/>
<entry colname="col7"/></row>
</tbody>
</tgroup>
</table>
<noteGroup xml:id="jofi844-ntgp-0002">
<note xml:id="jofi844-tbl-note-0001">
<label>a</label><p>1950&#x2013;1954, <i>Federal Reserve Bulletin</i>., January, 1957, p. 62. 1955&#x2013;1961, <i>Federal Reserve Bulletin</i>., June, 1963, p. 829. 1962&#x2013;1965, <i>Federal Reserve Bulletin</i>., June, 1966, p. 867.</p>
</note>
<note xml:id="jofi844-tbl-note-0002">
<label>b,c</label><p>Estimates of the Securities and Exchange Commission as reported in the <i>Federal Reserve Bulletin</i>., June, 1953, p. 634; December, 1961, p. 1450; April, 1962, p. 446; and June, 1966, p. 867.</p>
</note>
<note xml:id="jofi844-tbl-note-0003">
<label>d</label><p>Refer to Footnote 4.</p>
</note>
</noteGroup>
</tabular>

I have created a macro which works fine normally but it does not work when I put a loop in it or check on the box saying "run till the end of file".

Macro code:
Code: Select all
InsertMode
ColumnModeOff
HexOff
PerlReOn
Find RegExp "(?s)<row>.*</row>"
Copy
Open "C:\Users\user\Desktop\tab1.txt"
Paste
Open "C:\Users\user\Desktop\tab1 - Copy.txt"
Paste
Top
PerlReOn
Find RegExp "<row>\r\n"
Replace All ""
PerlReOn
Find RegExp "\r\n</row>"
Replace All ""
PerlReOn
Find RegExp "<entry(.*.)</entry>"
Replace All "col#"
ColumnModeOn
SelectToBottom
StartSelect
Key Ctrl+END
ColumnInsertNum 1 1 LeadingZero
Key SHIFT
Key END
Copy
CloseFile NoSave
Top
PerlReOn
Find RegExp "#"
Paste
ColumnModeOff
EndSelect
Top
PerlReOn
Find RegExp ""col0"
Replace All ""col"
PerlReOn
Find RegExp " ""
Replace All """
SelectAll
StartSelect
Copy
CloseFile NoSave
Paste
Just following few macro code lines are needed to convert sample 1 to sample 2 using UE v22.20:

Code: Select all
InsertMode
ColumnModeOff
HexOff
PerlReOn
Top
Loop 0
Find MatchCase RegExp "(?<=colname="col)#(?:.+\r\n<entry colname="col#)+"
IfNotFound
ExitLoop
EndIf
ColumnModeOn
ColumnInsertNum 1 1
ColumnModeOff
EndLoop
Top

The Perl regular expression Find command selects:

<entry colname="col#" valign="bottom">Year</entry>
<entry colname="col#" valign="bottom">Total Corporate Securities Issued<link href="#jofi844-tbl-note-0001"><sup>a</sup></link></entry>
<entry colname="col#" valign="bottom">Total Common Stock Issued<link href="#jofi844-tbl-note-0002"><sup>b</sup></link></entry>
<entry colname="col#" valign="bottom">Total Preferred Stock Issued<link href="#jofi844-tbl-note-0002"><sup>c</sup></link></entry>
<entry colname="col#" valign="bottom">Non-Convertible Preferred Stock Issued<link href="#jofi844-tbl-note-0003"><sup>d</sup></link></entry>
<entry colname="col#" valign="bottom">Non-Convertible as a Per Cent of Total Corporate Securities</entry>
<entry colname="col#
" valign="bottom">Non-Convertible as a Per Cent of Total Preferred</entry>

By enabling column mode this selection changes to:

<entry colname="col#" valign="bottom">Year</entry>
<entry colname="col#" valign="bottom">Total Corporate Securities Issued<link href="#jofi844-tbl-note-0001"><sup>a</sup></link></entry>
<entry colname="col#" valign="bottom">Total Common Stock Issued<link href="#jofi844-tbl-note-0002"><sup>b</sup></link></entry>
<entry colname="col#" valign="bottom">Total Preferred Stock Issued<link href="#jofi844-tbl-note-0002"><sup>c</sup></link></entry>
<entry colname="col#" valign="bottom">Non-Convertible Preferred Stock Issued<link href="#jofi844-tbl-note-0003"><sup>d</sup></link></entry>
<entry colname="col#" valign="bottom">Non-Convertible as a Per Cent of Total Corporate Securities</entry>
<entry colname="col#" valign="bottom">Non-Convertible as a Per Cent of Total Preferred</entry>

Insert Number is executed on this rectangular selection to insert the incremented numbers.

Those 2 commands are executed in a loop until nothing to modify found anymore.

As the Perl regular expression engine inside several years older UE v14.10 is not so powerful than those in UE v22.20, the macro above does not work with UE v14.10. Another method must be used to select the column on the lines on which to insert an incrementing number.

Code: Select all
InsertMode
ColumnModeOff
HexOff
UnixReOff
Top
Loop
Find MatchCase "<entry colname="col#"
Replace "<entry colname="col»"
IfNotFound
ExitLoop
EndIf
Find MatchCase "</row>"
Find MatchCase Up "col#"
Replace "col«"
Find MatchCase Up "col»"
Key LEFT ARROW
Find MatchCase Select "col«"
ColumnModeOn
ColumnInsertNum 1 1
ColumnModeOff
EndLoop
Top

This macro replaces the first col# in a row block by col» and the last one by col« to make it possible to create the same selection as the Perl regular expression engine with using a non regular expression find with selecting everything from current caret position being at character » up to end of found string being «. That is not so smart as the Perl regular expression find for selecting the block and produces two additional undo records, but the result is the same.

The second macro for UE v14.10 can be made faster on using 3 UltraEdit regular expression Replace All commands to insert » and «.

Code: Select all
InsertMode
ColumnModeOff
HexOff
UnixReOff
Top
Find MatchCase RegExp "^(<row>[^r^n^t ]++<entry colname="col^)#"
Replace All "^1»"
Find MatchCase RegExp "^(<entry colname="col^)#^("?+</row>^)"
Replace All "^1«^2"
Find MatchCase RegExp "^(<entry colname="col^)#^("?+^p</row>^)"
Replace All "^1«^2"
Loop
Find MatchCase "col»"
IfNotFound
ExitLoop
EndIf
Key LEFT ARROW
Find MatchCase Select "col«"
ColumnModeOn
ColumnInsertNum 1 1
ColumnModeOff
EndLoop
Top
Best regards from Austria
If there are more than 9 "<entry...>" elements in each/some "<row>...</row>" elements will the below added command do the required removal of the space character after the number?

After the last "Top" command
Code: Select all
PerlReOn
Find " ""
Replace All """

I have tried it and works fine, but just wanted to know whether " "" finds any other things apart from a space + a double quote in Perl regex.

Also, is it possible to create a macro for the same kind of sample but with added alignments shown in the below sample.

Code: Select all
<tabular xml:id="jofi854-tbl-0001" pRights="unknown" eRights="yes">
<table frame="topbot" colsep="0" rowsep="0" pgwide="1">
<tgroup cols="7">
<colspec colnum="1" colname="col1" align="left"/>
<colspec colnum="2" colname="col2" align="left"/>
<colspec colnum="3" colname="col3" align="left"/>
<colspec colnum="4" colname="col4" align="left"/>
<colspec colnum="5" colname="col5" align="left"/>
<colspec colnum="6" colname="col6" align="left"/>
<colspec colnum="7" colname="col7" align="left"/>
<thead><row>
<entry colname="col#" valign="bottom">Year</entry>
<entry colname="col#" valign="bottom">Total Corporate Securities Issued<link href="#jofi844-tbl-note-0001"><sup>a</sup></link></entry>
<entry colname="col#" valign="bottom">Total Common Stock Issued<link href="#jofi844-tbl-note-0002"><sup>b</sup></link></entry>
<entry colname="col#" valign="bottom">Total Preferred Stock Issued<link href="#jofi844-tbl-note-0002"><sup>c</sup></link></entry>
<entry colname="col#" valign="bottom">Non-Convertible Preferred Stock Issued<link href="#jofi844-tbl-note-0003"><sup>d</sup></link></entry>
<entry colname="col#" valign="bottom">Non-Convertible as a Per Cent of Total Corporate Securities</entry>
<entry colname="col#" valign="bottom">Non-Convertible as a Per Cent of Total Preferred</entry>
</row></thead>
<tbody>
<row rowsep="3">
<entry colname="col#"/>
<entry colname="col#"/>
<entry colname="col#"/>
<entry colname="col#"/>
<entry colname="col#"/>
<entry colname="col#"/>
<entry colname="col#"/>
<entry colname="col#"/>
<entry colname="col#"/>
<entry align="right" colname="col#"><math display="inline" xmlns="http://www.w3.org/1998/Math/MathML" altimg="urn:x-wiley:00221082:jofi844:equation:jofi844-math-0001" wiley:location="equation/jofi844-math-0001.png">$\left(\underline {4} \right)$</math></entry>
<entry align="right" colname="col#"><math display="inline" xmlns="http://www.w3.org/1998/Math/MathML" altimg="urn:x-wiley:00221082:jofi844:equation:jofi844-math-0002" wiley:location="equation/jofi844-math-0002.png">$\left(\underline {4} \right)$</math></entry>
</row>
<row>
<entry align="left" colname="col#">1965</entry>
<entry align="left" colname="col#" rowsep="1">15,992</entry>
<entry align="left" colname="col#" rowsep="1">1,547</entry>
<entry align="center" colname="col#" rowsep="1">725</entry>
<entry align="center" colname="col#" rowsep="1">449</entry>
<entry align="char" char="." colname="col#">2.8</entry>
<entry align="char" char="." colname="col#">61.9</entry>
</row>
<row>
<entry align="center" colname="col#">1965</entry>
<entry align="center" colname="col#" rowsep="1">15,992</entry>
<entry align="center" colname="col#" rowsep="1">1,547</entry>
<entry align="center" colname="col#" rowsep="1">725</entry>
<entry align="center" colname="col#" rowsep="1">449</entry>
<entry align="center" colname="col#">2.8</entry>
<entry align="center" colname="col#">61.9</entry>
</row>
<row>
<entry align="left" colname="col#">Totals</entry>
<entry align="char" char="." colname="col#">&#x0024;173.629</entry>
<entry align="char" char="." colname="col#">&#x0024;27.716</entry>
<entry align="char" char="." colname="col#">&#x0024;8.878</entry>
<entry align="char" char="." colname="col#">&#x0024;5.146</entry>
<entry colname="col#"/>
<entry colname="col#"/></row>
</tbody>
</tgroup>
</table>
</tabular>
Well, the non regular expression replace all with search string " "" and replace string """ removes EVERYWHERE in file a space character left to a double quote.

It would be most likely better to use this UltraEdit tagged regular expression Replace All

Code: Select all
UnixReOff
Find MatchCase RegExp "^(colname="col[0-9]+^) +"
Replace All "^1"

Or use alternatively this Perl regular expression using back-references Replace All

Code: Select all
PerlReOn
Find MatchCase RegExp "(colname="col[0-9]+) +"
Replace All "\1"

Both make sure to remove the space(s) after the column number in value of attribute colname.

For your second task with inserting incrementing numbers on not aligned colname I first want to offer a script solution as I would use nowadays for such tasks.

Code: Select all
if (UltraEdit.document.length > 0)  // Is any file opened?
{
   // Define environment for this script.
   UltraEdit.insertMode();
   UltraEdit.columnModeOff();

   // Move caret to top of the active file.
   UltraEdit.activeDocument.top();

   // Select entire file.
   UltraEdit.activeDocument.selectAll();

   // Is something selected, i.e. is file not empty?
   if (UltraEdit.activeDocument.isSel())
   {
      // Load (nearly) entire file content into memory into an array of strings
      // split into blocks whereby end tag </row> defines where to split.
      var asRowBlocks = UltraEdit.activeDocument.selection.split("</row>");

      // Process each block with the exception of last block as the
      // last block surely never contains entry elements to process.
      var nBlockCount = asRowBlocks.length - 1;
      for (var nBlock = 0; nBlock < nBlockCount; nBlock++)
      {
         // Split each row block into entry blocks using start tag <entry
         // as separator. The first block does surely not contain an col#
         // value and therefore can be always skipped on next processing
         // which replaces "col#" in each entry block by "col" and the
         // appropriate column number.
         var asEntries = asRowBlocks[nBlock].split("<entry");
         for (var nEntry = 1; nEntry < asEntries.length; nEntry++)
         {
            asEntries[nEntry] = asEntries[nEntry].replace("col#","col"+nEntry.toString(10));
         }
         // Join the updated entry blocks together to a row block.
         asRowBlocks[nBlock] = asEntries.join("<entry");
      }
      // Join all updated row blocks together to entire file content
      // and overwrite everything still selecting in active file.
      UltraEdit.activeDocument.write(asRowBlocks.join("</row>"));
      UltraEdit.activeDocument.top();
   }
}

I used this method in splitting up a file into blocks one or more times for inserting incrementing numbers already several times. It is really easy to code and very fast as everything is done in memory. The big advantages in comparison to macro solution below are:

  1. It does not matter if other lines than lines with entry element exist within a row element.
  2. It does not even matter if multiple entry elements are on the same line.
But this method can't be used for Unicode encoded files with characters having a code value greater U+00FF or for very large files. But this is most often no problem.

But here is also a macro solution using only non regexp and UltraEdit regexp replaces for compatibility with UE v14.10.

Code: Select all
InsertMode
ColumnModeOff
HexOff
UltraEditReOn
Top
TrimTrailingSpaces
Find MatchCase "></row>"
Replace All ">^p</row>"
Find MatchCase RegExp "^(<row?++>^)<"
Replace All "^1^p<"
Find MatchCase RegExp "%^(<entry*colname="^)^(col#^)"
Replace All "^2^1"
Find MatchCase RegExp "^(<row*>^pcol^)#"
Replace All "^1»"
Find MatchCase RegExp "%col#^(?+^p</row>^)"
Replace All "col«^1"
Loop 0
Find MatchCase "col»"
IfNotFound
ExitLoop
EndIf
Key LEFT ARROW
Find MatchCase Select "col«"
ColumnModeOn
ColumnInsertNum 1 1
ColumnModeOff
EndLoop
Top
Find MatchCase RegExp "%^(col[0-9]+^) ++^(<entry*colname="^)"
Replace All "^2^1"

The first 2 Replace All commands make more or less sure that each start row tag is at end of a line and each end row tag is at start of a line because for some unknown reason the last end row tag in your examples is always on same line as last entry line. (Well, I suppose the reason is a Replace All searching for </row><row> and using </row>^p<row> as replace string which of course does not move last </row> to a new line.)

The third UE regexp Replace All moves all col# to start of the line to get them aligned in the file for inserting the number.

The fourth and fifth UE regexp Replace All replace first col# in line below start row tag by col» and last col# in line above end row tag by col«.

Then the loop is executed finding » and «, selecting the column containing the 2 characters, and inserting the incremented numbers.

Finally one more UE regexp Replace All is used to move all colX from start of the line back to original position in line and additionally remove also the unwanted space(s) after the inserted number as not being included in both tags (marking/capturing groups).
Best regards from Austria
4 posts Page 1 of 1