メニュー

logo

カチシステムはお客様に寄り添った
システム開発と支援サービスを提供し
「やさしい最先端」を創造します。

【第47回】ロータス博士のWinActor塾~文字列操作Ⅳ

2021.09.17

前回までは文字列の比較について学んできた。

これらは文字列をチェックして処理を分岐させるものじゃったな。

今回は文字列の置換を学んでいこう。これは文字そのものを変化させるのじゃ。

前回の記事はこちら。

いよいよ今回から文字列操作の新技、チカンですね。

博士の華麗なチカンを見せてください!

おいおいおい、カタカナはいかん!しかもその言い方!

完全にワシやばい奴みたいになっちゃうじゃろ!

それでもワシはやってない!

(博士ってたまにおかしくなるなあ・・・)

博士ってたまにおかしくなるなあ・・・

漏れとる!漏れとるよ心の声が!!

文字列置換の基本

置換処理について

置換は読んで字のごとく、置き換えることです。

文字列の置換は、文字列の中から特定の文字列を検出し、それを指定した文字列に置き換えることを指します。

 

次の文字列を例として見てみましょう。

 

大きな家

 

これを「大きな家」から「小さな家」に変えるとします。

「家」は共通の文字(変換する必要が無いもの)なので「大きな」→「小さな」に変えましょう。

WinActorの処理として、まず最初に「大きな」を文字列の中から探します。

 

大きな

大きな

 

一致しました。ここまでは比較と同じです。

置換ではこのあと、一致した部分を指定の文字に置き換えます。

 

小さな

 

文字列の中に一致する部分が複数あった場合は、全てが置換されます。

 

大きな家と大きな

大きな  大きな

 

小さな家と小さな

 

そもそも一致する文字列がない場合は変換されません。

WinActorではこの文字列の置換をライブラリひとつで実行できます。

最初にキーワードを探して、一致したら変換する。

文字列比較で一致するか調べて分岐とか使いそうだなと思ったんですけど

ライブラリひとつだけでできちゃうんですね!

うむ、便利じゃろう。

置換対象の文字が含まれているかどうかを心配する必要はないぞ。

では早速シナリオ内に配置して使ってみよう。

 

文字列置換の利用

ライブラリは下記の階層にあります。

 

NTTATライブラリ > 07_文字列操作 > 01_変換・整形 > 文字列置換

 

それでは、シナリオ内に配置してプロパティを見てみましょう。

 

 

ロータス君、ここで問題じゃ。

このライブラリを使うにはまだ準備が足りておらん。

プロパティから足りないものを見つけてみるのじゃ。

僕をあまり甘く見てはいけませんよ博士。

答えはズバリ、変数です!

「変換文字列」には何か変数を入れないといけないので!

即答じゃったか。

これがわからなかったら補習の予定じゃったが

その心配もなかったようじゃな!

うわ、あぶな。

油断ならないですね。

では、変換の対象となる文字列を変数として準備しましょう。

今回は例として「変換対象文字列」という名前で作成しました。

初期値には「大きな家」と入れておきましょう。

 

 

ここまで準備ができたら、改めてプロパティを設定します。

「変換文字列」に、先ほど作成した「変換対象文字列」の変数を指定します。 

今回は「大きな」を「小さな」に変えたいので

「置換前」に「大きな」を、「置換後」に「小さな」を指定します。

正しく設定できれば次のような状態になっています。

 

 

実行して変数をチェックしてみると

 

 

現在値が小さな家になっていますね。

「大きな」という部分が変換されたことがわかります。

 

「置換前」に設定したキーワードがどこにも一致しない場合は置換が行われずに次のノードに進みます。

置換されなかった場合でもエラーにはなりません。

置換時の注意

変換した文字列(変数)は上書きされる

これはうっかりするとミスにつながることじゃからしっかり覚えておこう。

変換される前の文字列を残しておきたい場合は

変数をもうひとつ準備してコピーしておくのがよいぞ。

 

先ほどの例でもわかる通り、置換が完了した文字列はそのまま変数に上書きされます。

「大きな家」という文字列を置換し「小さな家」にしましたが

結果として残った変数内のデータは「小さな家」のみで、「大きな家」という文字列は消えてしまいます。

 

変換される前の文字列データをWinActor上に残しておきたい場合は

博士の言うように保持用の変数を準備し「変数値コピー」を利用して中身をコピーしておきます。

 

 

 

こうすることによって置換が実行された後でも、もとの文字列を保持することができます。

 

 

 

うーん、でも実際に上書きされて困ることってありますかね?

ほう、ではまたひとつ問題を出そう。

上書きには注意が必要だということを実感してもらおうかのう。

「青い花と赤い空」という文字列を

「赤い花と青い空」に直すシナリオを作ってみてくれ。

僕をあまり甘く見てはいけませんよ博士。

そのシナリオはズバリ、これです!

二回置換すればいいんです!

 

ふぉっふぉっふぉ!おぬしは本当に期待を裏切らんのう!

読者の皆もあきれておるぞ。

えっ、どういうことですか?

実行してみればわかるじゃろう。ほれ。

 

あ!どっちも青になってる!

一体どうして・・・

ロータス君のミスは、置換後の文字列が上書きされることを考慮していなかったことです。

このシナリオで置換されていく文字列を順に見ていくとすぐにわかります。

まず最初の置換で「青い」を「赤い」に変えています。 

 

青い花と赤い空 

青い

 

赤い花と赤い空

 

このあと続けて空の色を変えようと「赤い」を「青い」に置換しています。

しかし変換対象となる文字列は、前回の置換の結果が上書きされているので

現在は「赤い花と赤い空」。これでは2箇所引っかかってしまいます。

 

赤い花と赤い

赤い  赤い

 

青い花と青い

そんな・・・こんな単純なミスを・・・

どうじゃ?直感でどんどん置換していってしまうとこうなるのじゃ。

こういったミスをしないよう、変換後の文字列がどうなっているかをしっかり確認して作ろう。

置換の利用パターン

取得データの改変

実際に置換を使用する場合、変数に初期値を入れて使用することはありません。

ほとんどの場合、外部からデータを取得し、それを加工するために使用します。

 

例えばインターネット上のサイトからメールアドレスを取得する場合

スパム対策のために次のようにマスキングされている場合があります。

 

rotaskun-ikemen★example.co.jp

 

これではアドレスとして利用することができないため置換を使用して加工します。

 

 

※「取得アドレス」には先ほどのアドレスを取得し、格納しているものとします。

 

 

このように「★」を「@」に置換することで、メールアドレスとして使用できるデータになりました。

 

 

 

不要な文字の削除

置換にはもう一つ便利な使い方があります。

それは特定の文字を消すことです。

 

例えば、次のような電話番号を取得したとしましょう。

 

03-5422-9627

※この番号はRoTAS問い合わせ用の番号です 

 

これを別のシステムに入力する際に、ハイフン無しを求められる場合があります。

そういった場合は「置換後」に空欄を指定します。

 

 

このように「置換後」を空欄にすることで「置換前」に一致した文字を消すことができます。

 

 

これでハイフンのない電話番号に変換することができました。 

 

置換ってこんなに実用的なんですね!

しかも特定の文字列を消すなんて使い方まで・・・。

これはしっかり覚えないと!

どうじゃ、文字列操作が楽しくなってきたじゃろう!

実はさっきの青い花問題も、他のライブラリと組み合わせることで解決できるのじゃ。

これは後々教えるとしよう。

ハイ!僕も勉強して博士みたいにチカンライフを満喫します!

いや、じゃからその表現はマズイんじゃって!


 

関連記事こちらの記事も合わせてどうぞ。

最近の記事

カテゴリ

PAGETOP