【Automation Anywhere】高度な文字列と数値の処理 Meta Bot 6選

前回の記事「[Bot Storeで新しい機能を追加しよう！](https://qiita.com/Okura_/items/b926368524ade6e94dda)」でBot Store上から拡張機能を簡単に追加する方法を紹介しました。この方法を使って、さっそくよく使われる処理を追加していきたいと思います。

今回は、文字列/数値処理でよく使われるAA純正の6つのMeta Botを紹介します。

* [Perform String and Number Operations](https://botstore.automationanywhere.com/bot/string-and-number-operations/)
* [Perform Japanese Utilities](https://botstore.automationanywhere.com/bot/perform-japanese-utilities/)
* [Email Address Validator](https://botstore.automationanywhere.com/bot/email-address-validator/)
* [Remove HTML Tags](https://botstore.automationanywhere.com/bot/remove-html-tags/)
* [Perform Various Math Operations](https://botstore.automationanywhere.com/bot/perform-various-math-operations/)
* [Translator Metabot](https://botstore.automationanywhere.com/bot/an-easy-translator-metabot/)

# Perform String and Number Operations
文字種の判別、変換、書式変更や数字を処理する10個の追加のコマンドを提供します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/490819/6cb57628-0975-185c-b622-2aaf3d07622e.png)

算術処理

|ロジック名|Inputパラメータ|Outputパラメータ|説明|
|:--|:--|:--|:--|
|**Arithmetic Operations on Numbers**|**Input_Number_1:**引数1<br/>**Input_Number_2:**引数2<br/>**Arithmetic_Operation:**演算子<br/>**Number_of_Decimals_in_Result:**出力先の小数点以下の桁数。|**Result:**出力先の変数|演算子を使った算術演算を行います。演算子に指定できるもの="+-*/"|
|**IsPositive**|**InputString:**引数|**Result:**出力先の変数|引数が正の値かどうかを判定します。(True/False)文字列の場合もFalseになります。|

文字列処理

|ロジック名|Inputパラメータ|Outputパラメータ|説明|
|:--|:--|:--|:--|
|**Add Zeroes before a Number**|**Input_Number:**引数<br/>**Desired_Length_Including_Zeroes:**出力の桁数|**Result:**出力先の変数|桁数が指定したものになるよう、数字の前を0で埋めた文字列を返します。(ex. 4桁なら"0100")|
|**Convert Number to Currency**|**Culture_Name:**引数<br/>**Input_Number:**引数|**Result:**出力先の変数|指定したCulture_Nameの通貨で引数をフォーマットした文字列を返します。(ex. enなら$100)|
|**Convert Number to Text**|**Input_Number:**引数<br/>**IsIndianFormat:**インド方言(true/false)|**Result:**出力先の変数|引数の数字を、読み方の英単語に変換します。(ex: 100000 → One hundred Thousand)|
|**IsAlphanumeric**|**Input_Number:**引数|**Result:**出力先の変数|引数が英数字かを判別します。(True/False)|
|**IsDate**|**Input_Number:**引数|**Result:**出力先の変数|引数が日付かを判別します。(True/False)|
|**IsNumeric**|**Input_Number:**引数|**Result:**出力先の変数|引数が数字かを判別します。(True/False)|
|**IsSpecialCharacter**|**Input_Number:**引数|**Result:**出力先の変数|引数が記号かを判別します。(True/False)|
|**Remove Special Characters**|**Input_Number:**引数|**Result:**出力先の変数|引数から記号を取り除きます。|

```
Arithmetic Operations on Numbersの例: 
Input_Number_1="10", Input_Number_2="5"
Arithmetic_Operation="+", Number_of_Decimals_in_Result="2"
結果:"15.00"
```

# Perform Japanese Utilities
半角/全角の変換、および日付書式の西暦/和暦の変換を行うことができます。

|ロジック名|Inputパラメータ|Outputパラメータ|説明|
|:--|:--|:--|:--|
|**ToFullWidth**|**vInput:**入力文字列|**vOutput:**出力先の変数|半角文字で対応する全角文字があるものを全角文字に変更します。|
|**ToGregorianCalendar**|**vInput:**日付/時刻文字列<br/>**vInputFormat:**入力文字列の日付形式<br/>**vOutputFormat:**出力文字列の日付形式|**vOutput:**出力先の変数|日付/時刻の書式を指定した西暦の書式に変更します。|
|**ToHalfWidth**|**vInput:**入力文字列|**vOutput:**出力先の変数|全角文字で対応する半角文字があるものを半角文字に変更します。|
|**ToJapaneseCalendar**|**vInput:**日付/時刻文字列<br/>**vInputFormat:**入力文字列の日付形式<br/>**vOutputFormat:**出力文字列の日付形式|**vOutput:**出力先の変数|日付/時刻の書式を指定した和暦の書式に変更します。(令和対応)|

```
ToFullWidthの例: 
vInput="012345ｱｲｳｴｵabcde"
結果:"０１２３４５アイウエオａｂｃｄｅ"
```

```
ToHalfWidthの例: 
vInput="０１２３４５あいうえおアイウエオ"
結果:"012345あいうえおｱｲｳｴｵ"
```

```
ToJapaneseCalendarの例: 
vInput="09/02/2019 09:00:00 PM", vInputFormat="MM/dd/yyyy", vOutputFormat="ggy年M月d日"
結果: "令和元年9月2日"
```

# Email Address Validator
文字列が電子メールアドレスとして正しいフォーマットかを検証します。

|ロジック名|Inputパラメータ|Outputパラメータ|説明|
|:--|:--|:--|:--|
|**EmailAddressValidator**|**vEmailAddress:**検証する文字列。|**vConfirm:**出力先の変数|vEmailAddressが電子メールアドレスとして正しいフォーマットかを検証します。(valid/invalid)|

# Remove HTML Tags
入力した文字列からHTMLタグを取り去った文字列を出力します。入力文字列によってはエラーが発生する可能性があるので、Error Handlingを行ってください。

|ロジック名|Inputパラメータ|Outputパラメータ|説明|
|:--|:--|:--|:--|
|**RemoveHTMLTags**|**vInputString:**加工する文字列。|**vOutputString:**出力先の変数|入力した文字列からHTMLタグを取り去った文字列を出力します。|

例: 入力する文字列

```
<!--
/* Font Definitions */
@font-face
                {font-family:"Cambria Math";
                panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
                {font-family:Calibri;
                panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
                {font-family:Verdana;
                panose-1:2 11 6 4 3 5 4 4 2 4;}
@font-face
                {font-family:Roboto;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
                {margin:0in;
                margin-bottom:.0001pt;
                font-size:11.0pt;
                font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
                {mso-style-priority:99;
                color:blue;
                text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
                {mso-style-priority:99;
                color:purple;
                text-decoration:underline;}
p.msonormal0, li.msonormal0, div.msonormal0
                {mso-style-name:msonormal;
                mso-margin-top-alt:auto;
                margin-right:0in;
                mso-margin-bottom-alt:auto;
                margin-left:0in;
                font-size:11.0pt;
                font-family:"Calibri",sans-serif;}
span.EmailStyle18
                {mso-style-type:personal;
                font-family:"Calibri",sans-serif;
                color:windowtext;}
span.EmailStyle19
                {mso-style-type:personal-reply;
                font-family:"Calibri",sans-serif;
                color:windowtext;}
.MsoChpDefault
                {mso-style-type:export-only;
                font-size:10.0pt;}
@page WordSection1
                {size:8.5in 11.0in;
                margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
                {page:WordSection1;}
-->
<p class="MsoNormal"><strong><u><span style="font-size:12.0pt;font-family:&quot;Calibri&quot;,sans-serif;color:black">Effective:
</span></u></strong><strong><u><span style="font-size:12.0pt;font-family:&quot;Calibri&quot;,sans-serif">4/26/19</span></u></strong><u><span style="font-size:12.0pt;color:maroon"><o:p></o:p></span></u></p>


<p class="MsoNormal"><b>Effective: 1/29/19<o:p></o:p></b></p>

<p class="MsoNormal"><span style="font-size:9.0pt;font-family:&quot;Verdana&quot;,sans-serif">Effective Date: 2019 03 29
<br>
```

結果:

```
Effective:
4/26/19


Effective: 1/29/19

Effective Date: 2019 03 29

```

# Perform Various Math Operations
端数処理、三角関数/逆三角関数/双曲線関数、累乗/平方根、最大値/最小値/絶対値など、19個の高度な数学の関数を提供します。その振る舞いは.NETの動作に準拠します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/490819/0cd655e3-1db2-fa66-0481-7105b1e45812.png)

端数処理

|ロジック名|Inputパラメータ|Outputパラメータ|説明|
|:--|:--|:--|:--|
|**Ceiling**|**vInput:**入力値。|**vOutput:**出力先の変数|切り上げた整数の値を得ます。|
|**Floor**|**vInput:**入力値。|**vOutput:**出力先の変数|切り捨てた整数の値を得ます。(負の値の場合は元の値を超えない整数)|
|**Round**|**vInput:**入力値。<br/>**vDigits:**入力値。<br/>**vMode:**入力値。|**vOutput:**出力先の変数|最近接偶数丸め(vMode=0)/四捨五入(vMode=1)を小数点以下vDigitsの桁数を残すように行った数を得ます。|
|**Truncate**|**vInput:**入力値。|**vOutput:**出力先の変数|切り捨てた整数の値を得ます。(負の値の場合は整数部分を返す)|

三角関数

|ロジック名|Inputパラメータ|Outputパラメータ|説明|
|:--|:--|:--|:--|
|**Sin**|**vInput:**入力値。|**vOutput:**出力先の変数|入力値のSin関数を得ます。引数はラジアン単位の角度を指定します。|
|**Cos**|**vInput:**入力値。|**vOutput:**出力先の変数|入力値のCos関数を得ます。引数はラジアン単位の角度を指定します。|
|**Tan**|**vInput:**入力値。|**vOutput:**出力先の変数|入力値のTan関数を得ます。引数はラジアン単位の角度を指定します。|

逆三角関数

|ロジック名|Inputパラメータ|Outputパラメータ|説明|
|:--|:--|:--|:--|
|**Asin**|**vInput:**入力値。|**vOutput:**出力先の変数|入力値の逆Sin関数を得ます。戻り値としての角度はラジアンを使って -π/2 から π/2 までの範囲で表されます。|
|**Acos**|**vInput:**入力値。|**vOutput:**出力先の変数|入力値の逆Cos関数を得ます。戻り値としての角度はラジアンを使って 0 から π までの範囲で表されます。|
|**Atan**|**vInput:**入力値。|**vOutput:**出力先の変数|入力値の逆Tan関数を得ます。戻り値としての角度はラジアンを使って -π/2 から π/2 までの範囲で表されます。|
|**Atan2**|**vInput1:**入力値1。<br/>**vInput2:**入力値2。|**vOutput:**出力先の変数|入力値の逆Tan関数を得ます。ATan(vInput2/vInput1)=ATan(vInput1, vInput2) vInput=0にできるのがATan関数との違いです。|


双曲線関数

|ロジック名|Inputパラメータ|Outputパラメータ|説明|
|:--|:--|:--|:--|
|**Sinh**|**vInput:**入力値。|**vOutput:**出力先の変数|入力値のSinh関数を得ます。|
|**Cosh**|**vInput:**入力値。|**vOutput:**出力先の変数|入力値のCosh関数を得ます。|
|**Tanh**|**vInput:**入力値。|**vOutput:**出力先の変数|入力値のTanh関数を得ます。|

累乗/平方根

|ロジック名|Inputパラメータ|Outputパラメータ|説明|
|:--|:--|:--|:--|
|**Pow**|**vInput1:**入力値1。<br/>**vInput2:**入力値2。|**vOutput:**出力先の変数|vInput1のvInput2乗の累乗を得ます。|
|**Sqrt**|**vInput:**入力値。|**vOutput:**出力先の変数|平方根を得ます。|

最大値/最小値/絶対値

|ロジック名|Inputパラメータ|Outputパラメータ|説明|
|:--|:--|:--|:--|
|**Abs**|**vInput:**入力値。|**vAbsValue:**出力先の変数|絶対値を得ます。|
|**Max**|**vInput1:**入力値1。<br/>**vInput2:**入力値2。|**vOutput:**出力先の変数|vInput1とvInput2のうち大きいほうを得ます。|
|**Min**|**vInput1:**入力値1。<br/>**vInput2:**入力値2。|**vOutput:**出力先の変数|vInput1とvInput2のうち小さいほうを得ます。|

# Translator Metabot
Yandex 機械翻訳サービスに接続してテキストを翻訳します。90言語以上をサポートします[^1]。

[^1]: Yandex 機械翻訳サービスは日本語への翻訳品質はあまりよくないようです。Google翻訳、Bing翻訳の方が優れています。

|ロジック名|Inputパラメータ|Outputパラメータ|説明|
|:--|:--|:--|:--|
|**An easy translator Metabot**|**vLangDetect:**元の言語。指定しなくてもよいがその場合は空の変数を指定。<br/>**vLang:**翻訳先の言語 (ex: en)。<br/>**vText:**翻訳するテキスト。|**vResult:**出力先の変数|vTextを指定した言語に翻訳します。|

```
例1: 
vLangDetect=(空の変数)
vLang="en"
vText="O robô detecta o idioma do documento, E traduz para o idioma que você quer."
結果:"The robot detects the languauge of the document, And translates it to the language you want."
```

```
例2: 
vLangDetect=(空の変数)
vLang="ja"
vText="O robô detecta o idioma do documento, E traduz para o idioma que você quer."
結果:"ロボットを検出し語の文書を変換しい言語に対応しています。"
```
[^2]

[^2]: Google翻訳/Bing翻訳では「ロボットはドキュメントの言語を検出し、必要な言語に変換します。」と訳されます。