【第94回】ロータス博士のWinActor塾~文字列分割とループの小技 思索編
今日は解答編!といきたいところじゃが、思索編じゃ。
思索編?
要するにヒントじゃ。ヒントが欲しいという声があっての。
解答を待っていた方には申し訳ないが、まずは文字列を配列のように扱う方法だけを
ここで伝授しようと思うぞ。
あ、よかった。
僕のシナリオ作成期限が伸びたってことか。
なんか良くない考え方じゃなそれ・・・。
解答編はすぐにやるぞ。もうちょっとだけ待つのじゃ!
文字列を配列として扱うワザ
配列の構造を思い出そう
まずは配列のおさらいをしましょう。
配列とは、変数の箱が連続した形をしているものです。
aという名前の配列で、要素数が5の場合はこのようになりますね。
そして中カッコ[] の中の数字を添字またはインデックスと呼びました。
配列aの3つめの要素が欲しい場合は「a[2]」と指定します。
このイメージを文字列内でやってしまおう、というのが今回の趣旨です。
それでは早速その方法をご紹介します。
文字列を配列のように取り扱う
複数のデータが格納できる配列ですが、その一番の特徴は区切りがあることです。
この区切りを文字列内で再現することを考えてみるとどうでしょう。
区切り文字を使うのが良さそうですね。
例として ,(カンマ) を区切り文字として「りんご」「オレンジ」「ぶどう」の3つを表現すると
りんご,オレンジ,ぶどう
このような文字列になります。配列のように見えてきませんか?
図にしてみるとさらにイメージがつくでしょう。
「文字列全体」という変数に先ほどの文字列を格納しました。
ここまでくると、これを配列のように扱うための次の課題が見えてきますね。
そうです。インデックスです。
これは、あるライブラリを使うと一発で解決できます。
文字列分割ライブラリでデータを取得
以前紹介した文字列分割がここで役立ちます。
プロパティを確認してみましょう。まさにこれという項目があります。
まんまじゃないですか!
うむ。まんまじゃ。
このライブラリが今回のシナリオの肝じゃな。
先ほどの変数「文字列全体」から、カンマ区切りで3つ目になる「ぶどう」を取り出したい場合は次のように指定します。
格納先は「取得文字列」という名前の変数にしています。
※インデックスは0から始まるので、2を指定します。
カンマ区切り文字列の作成について
この例ではカンマで区切って全てのデータを持つ文字列を「文字列全体」という名前の変数に作成しました。
今度はデータの取り出し方ではなく、この「文字列全体」を作成するためのデータの格納方法を紹介します。
課題では、取得するデータ数が可変ですのでループを使用します。
ループ中に「次に取得すべきデータが存在するか」をチェックし、存在したら変数「文字列全体」に追加していくという流れにしましょう。
ループ内で文字列を格納していく方法はいくつかあります。ここでは2つの例を紹介します。
1つ目は、コピーした文字列とカンマという区切り文字を別々に格納していく方法です。
このやり方は、最終的な文字列とカンマの関係がきれいになります。簡単なフロー図で見ると
このように、ループ直前にカンマを足していくと、最終的な文字列がきれいに「りんご,オレンジ,ぶどう」となります。
もうひとつの方法は、格納回数を最小限にするやり方です。
ちなみにわしのオススメはこの同時に格納する方法じゃ。
ループ内でのノード数削減は高速化への貢献度が高いのじゃ。
この方法では、最終的な文字列の形は少し変に見えます。先頭のカンマが不要ですね。
「カンマ+コピーした文字列」ではなく「コピーした文字列+カンマ」としても不要なカンマは含まれてしまいます。
この方法を用いた場合は、後からこの文字列からデータを取得する際のインデックスの指定に注意しましょう。
ちなみに、格納格納と言っているがそのまま入れたら上書きになってしまうから
ちゃんと文字列全体には「文字列全体+カンマ+コピーした文字列」となるように
毎回格納するんじゃぞ。
どうだったかな?ヒントというよりほぼ答えかもしれんな!
今日学んだことを使って課題を突破して欲しい!
これいけますよ博士!
まあ見ててくださいよ!
冒頭であんなこと言ってたのに?
・・・
じゃ、終わりますか、塾。
そ、そうじゃな。
では次回の解答編で会おう!
関連記事こちらの記事も合わせてどうぞ。
2024.11.05
【第105回】ロータス博士のWinActor塾~新しい画像マッチング画面
2024.09.27
【第104回】ロータス博士のWinActor塾~ガイド利用シナリオ(作成編)
2024.09.10