【質問】
変数内に改行を含むテキストを格納しており、そこから空白の行(=改行のみの行)を削除したい。
「テキスト - 置換」アクションを使用し、正規表現を使用して「^[\n\r]+」を削除するように設定したが
結果のテキストが置換前と変化していない。
なお、テキストエディタで同様の置換操作をすると想定どおり空白行が削除される。
AutoMateを使用して空白行を削除する方法は無いだろうか。
(編集前のテキスト)
----------------------------------------
Server
Login:
Password
Message......................1
Message......................2
Message......................3
Message......................4
----------------------------------------
(欲する結果のテキスト)
----------------------------------------
Server
Login:
Password
Message......................1
Message......................2
Message......................3
Message......................4
----------------------------------------
【回答】
テキストエディタでは有効である正規表現(先頭の空白指定)がAutoMateで動作しなかった理由は
AutoMateの変数の中身が見かけ上複数行になっているものの実際には1行扱いとなっている為です。
AutoMateにおいては、以下の方法にて代用可能です。
1. 「テキスト - 置換アクション」を使用して、改行が2つ以上続いている部分を改行1つに置換
([\n\r]{2,}を%vbCrLf%に置換)
2. 「テキスト - トリム」アクションを使用して、変数の始め・終わりから改行を削除
(テキストの始め・終わりに改行2連以上があると、改行1つになって残るため)
下記、一例です。下記の例では、置換対象となる変数を「var_test」とします。
------------------------一例:ここから------------------------
<AMVARIABLE NAME="var_test">
Server
Login:
Password
Message......................1
Message......................2
Message......................3
Message......................4
</AMVARIABLE>
<AMTEXT ACTIVITY="replace" TEXT="%var_test%" FIND="[\n\r]{2,}" REPLACE="%vbCrLf%" RESULTVARIABLE="var_test" USERE="YES" />
<AMTEXT ACTIVITY="trim" TEXT="%var_test%" RESULTVARIABLE="var_test" REMOVE="returns" />
<AMSHOWDIALOG>%var_test%</AMSHOWDIALOG>
------------------------一例:ここまで------------------------
(構築例2: 空白行、およびブランクのみを含む行を削除)
<AMVARIABLE NAME="var_txt">
経理部 各位
お疲れ様です。
下記の日程で~~
念の為ご連絡をさせていただきます。
・11/5(木)~~
・11/6(金)終日
以上
</AMVARIABLE>
<AMFILESYSTEM ACTIVITY="write_file" FILE="%GetDesktopDirectory()%\work.txt" APPEND="no">%var_txt%</AMFILESYSTEM>
<AMFILESYSTEM ACTIVITY="csv_to_dataset" SOURCE="%GetDesktopDirectory()%\work.txt" RESULTDATASET="ds_txt" ROWASHEADER="NO" DELIMITER="こんな文章は基本的に出現しない" />
<AMFILESYSTEM ACTIVITY="delete" SOURCE="%GetDesktopDirectory()%\work.txt" />
<AMLOOP ACTIVITY="dataset" DATASET="ds_txt" />
<!--ブランク以外を含んでいる場合だけ書込み-->
<AMIF ACTIVITY="contains_text" TEXT="%ds_txt.Column1%" SUBSTRING="[^\s]" USERE="YES" />
<AMFILESYSTEM ACTIVITY="write_file" FILE="%GetDesktopDirectory()%\work.txt">%ds_txt.Column1%</AMFILESYSTEM>
<AMIF ACTIVITY="end" />
<AMLOOP ACTIVITY="end" />
<AMFILESYSTEM ACTIVITY="read_file" FILE="%GetDesktopDirectory()%\work.txt" RESULTVARIABLE="var_txt" />