2013年06月27日

配列 その1

配列を使わないプログラムは存在しない、と言ってもいいくらい、配列はプログラムの中で頻繁に使われます。私は専門家ではないので、きちんとした配列の解説は出来ませんが、実際にプロデルのプログラムの中で使われる例を挙げて、ヨタヨタと説明していきたいと思います。

※2013年6月30日 追記
ブラウザでは読みにくい、という方のために、「配列 その1」から「配列 その8」までの原稿をまとめたテキスト版をアップしました。

http://talk-pc.sakura.ne.jp/array/array-1-8.zip


■1次配列

まずは、Microsoftの表計算ソフト「Excel」を使って説明していきたいと思います。
Excelでは、セルと呼ばれる長方形のワクが縦横にマス目の形で表示されています。
表の一番上が1行目です。
そこから下に向かって順に 2行目 3行目 … と並んでいます。
「わかってるよ、アホか」と言われそうですが、もうちょっとおつき合いを。

1行目の左から A B C … と右に向かって列が並んでいます。
最初は、このうちの A列だけを使います。
1列しか使わないので、1次配列 または 1次元配列と呼ばれています。

#注意:本来の配列では、1行だけの配列を1次配列と言うのですが、ここでは説明の都合上、列 を使って書いていきます。慣れてきたら、後で脳内で変換して下さい。

■A列のセルにデータを入力する

A列のセルに、1行目から5行目までデータを入力していきます。

A列の1行目 (A1) 札幌
A列の2行目 (A2) 東京
A列の3行目 (A3) 名古屋
A列の4行目 (A4) 大阪
A列の5行目 (A5) 福岡

これで一つの配列の出来上がりです。
配列の名前は「A列」ということになりますが、わかりにくいので「都市名」に変更します。
もちろん、実際の Excelではそんなことは出来ないので、脳内で変更して下さい。
先ほど入力したセルの番地も、それに合わせて変更してみます。

都市名の1行目 (都市名1) 札幌
都市名の2行目 (都市名2) 東京
都市名の3行目 (都市名3) 名古屋
都市名の4行目 (都市名4) 大阪
都市名の5行目 (都市名5) 福岡

■配列の「要素」

それぞれのセルに入力されたデータ(この場合は都市の名前)を、配列の「要素」と呼びます。そして、要素の数を「個数」と言います。
この「都市名」という配列には、5個のセルがあるので、配列の個数は 5個ということになります。
※他の言語では「要素数」と呼ぶ例が多いようですが、プロデルの設定項目では「個数」となります。

■要素番号

配列の要素は、並んでいる順番に応じて番号が付けられています。この番号を「要素番号」と言います。つまり、配列の最初の要素の番号は 1 になり、次の要素の番号は 2 となり、次が 3 …となります。
※他の言語では、要素番号は 0 から始まる例が多いようですが、プロデルでは 1 から始まります。

上の都市名の配列で言うと、

都市名という配列の要素番号1は 札幌
都市名という配列の要素番号2は 東京
都市名という配列の要素番号3は 名古屋
都市名という配列の要素番号4は 大阪
都市名という配列の要素番号5は 福岡

となります。
でも、プログラムを作る時に、いちいちこんな面倒くさい書き方はしていられません。
そこで、先ほど脳内で変換した Excelの番地を使ってみます。

都市名1 札幌
都市名2 東京
都市名3 名古屋
都市名4 大阪
都市名5 福岡

これですっきりしました。
……とばかり言っていられません。
このままだと、変数として使うのには不都合が生じてしまうからです。
「都市名1」という変数は、「札幌」という文字列と1対1で対応していて、都市名という配列の1番目の要素であることを示していません。

■添え字

そこで、配列の要素を変数にする時は ( ) で 要素番号を括って書きます。これを「添え字」と言います。

都市名(1)は、「札幌」

こう書くことで、都市名という配列の1番目の要素は「札幌」であることを示すことが出来ます。
※札幌 は文字列なので 「 」 で括ってあります。
※(1) の部分は、半角でもOKです。
※他の言語では [1] という添え字の書き方が多いようです。

これで、先ほどのデータを配列にしてみます。そして、要素番号を指定して、その要素の内容を表示させます。
※ //(全角スペース 半角の//)の後ろは、説明(コメント)です。

──────────────────────────────
都市名(1)は、「札幌」 //都市名という配列の要素番号1は 札幌
都市名(2)は、「東京」 //都市名という配列の要素番号2は 東京
都市名(3)は、「名古屋」 //都市名という配列の要素番号3は 名古屋
都市名(4)は、「大阪」 //都市名という配列の要素番号4は 大阪
都市名(5)は、「福岡」 //都市名という配列の要素番号5は 福岡

都市名(4)を表示する
──────────────────────────────

このプログラムは、別の形で書くことも出来ます。

──────────────────────────────
都市名は、{「札幌」、「東京」、「名古屋」、「大阪」、「福岡」}
都市名(4)を表示する
──────────────────────────────

こういうふうに { } で データの並びを括ることによって、配列にすることが出来ます。言い方を変えると、このデータの一覧は配列である、と示しているということになります。
こうすると、データの並んでいる順番通りに、配列の要素番号が割り当てられます。

※札幌 東京 … というデータは文字列なので 「 」 で括っています。
そしてそれを 、読点 で区切ってあります。この区切りの文字は 半角/全角の , , を使ってもOKです。
※データが数値の場合は 「 」 で括る必要はありません。

例:
────────────────
得点は、{80、50、90、30、100}
得点(4)を表示する
────────────────

 → 次の記事「配列 その2」へ続く。
posted by yanikun at 05:35| Comment(0) | TrackBack(0) | produire

配列 その2

■自分で作った(入力した)配列をプログラムで使う

下ノプログラムは、HTMLで使われる基本16色の一覧を、自分で入力して配列にしたものです。

──────────────────────────────
配列は、{「black #010203」、「white #FFFFFF」、「red #FF0000」、「yellow #FFFF00」、「lime #00FF00」、「green #008000」、「olive #808000」、「aqua #00FFFF」、「blue #0000FF」、「navy #000080」、「teal #008080」、「fuchsia #FF00FF」、「purple #800080」、「maroon #800000」、「gray #808080」、「silver #C0C0C0」}
結果は、配列を「[改行]」で繋げたもの
結果を報告する
──────────────────────────────

1行目では、基本16色を配列の形で記述してあります。
2行目と3行目では、配列をそのまま表示したり、報告したのでは、ちょっとわかりにくいため、配列を[改行]で繋げて(文字列に変換して)報告させています。これも、プロデルの配列の手順の一つです。
こうすると、配列のそれぞれの要素が1行に一つずつ表示されるため、確認がしやすくなります。
※文字列を配列にしたり、配列を文字列にしたりする手順については、後で説明します。

2行目の「〜報告する」の代わりに、前回 説明した「添え字」を使うと、指定した番号の配列の要素を取得することが出来ます。

───────────
配列(3)を表示する
───────────

※結果の報告ダイアログや、メッセージボックスを読むとわかると思いますが、取得した要素は「文字列」の形になります。要素が数値の場合は、「数値」の形で取得されます。また、この後で説明する2次配列では「配列」の形で取得されます。
ここで取得した要素=データを、続けてプログラムの中で利用する時には、このことを押さえておいて下さい。

■配列をウィンドウ部品に表示させる

上で紹介した配列を、ウィンドウ部品に表示させるためのプログラムの例を紹介します。
リストビュー1と選択リスト1という二つの部品が配置されていて、それぞれのリストで上下矢印キーで項目を選択すると、その項目(色名)がテキスト1に表示されます。

──────────────────────────────
「Produire.WinControl.dll」を利用する
ウィンドウ1を表示する
待機する

ウィンドウ1とは
ウィンドウを継承する

はじめの手順
初期化する
配列は、{「black #010203」、「white #FFFFFF」、「red #FF0000」、「yellow #FFFF00」、「lime #00FF00」、「green #008000」、「olive #808000」、「aqua #00FFFF」、「blue #0000FF」、「navy #000080」、「teal #008080」、「fuchsia #FF00FF」、「purple #800080」、「maroon #800000」、「gray #808080」、「silver #C0C0C0」}

//選択リスト1に、配列を追加して表示させます。
選択リスト1の一覧を、配列に変える

//リストビュー1に、配列(の要素)を追加して表示させます。
リストビュー1の詳細一覧を、配列に変える
終わり

初期化する手順
この内部領域大きさを{295、271}に変える
この内容を「ウィンドウ1」に変える

ラベル1というラベルを作る
その内容を「基本色一覧」に変える
その位置と大きさを{13、13、65、12}に変える

リストビュー1というリストビューを作る
その表示方法を「詳細」に変える
その見出し一覧を{「色名」}に変える
その見出し幅を{120}に変える
その位置と大きさを{12、29、138、220}に変える
//項目が一つなので、リストボックスでいいのですが、
//リストビューにしている理由は後述します。

ラベル2というラベルを作る
その内容を「基本色一覧」に変える
その位置と大きさを{156、13、65、12}に変える

選択リスト1という選択リストを作る
その位置と大きさを{156、29、126、20}に変える

ラベル3というラベルを作る
その内容を「色名」に変える
その位置と大きさを{138、186、29、12}に変える

テキスト1というテキストを作る
その位置と大きさを{156、201、126、19}に変える

ボタン1というボタンを作る
その内容を「閉じる」に変える
その位置と大きさを{207、226、75、23}に変える

終わり

リストビュー1が選択された時の手順
テキスト1の内容を、リストビュー1の選択内容に変える
終わり

選択リスト1が選択された時の手順
配列は、選択リスト1の一覧
値は、選択リスト1の選択番号
テキスト1の内容を、配列([値])に変える
終わり
//この手順については、後で説明してあります。

ボタン1がクリックされた時の手順
自分を閉じる
終わり

終わり
──────────────────────────────

■プログラムの説明

ここでは、プログラムの中の、ポイントとなる部分だけに絞って説明します。

────────────────────
選択リスト1の一覧を、配列に変える
────────────────────
選択リストの一覧は配列の形になっています。ウィンドウに選択リストを配置しただけでは、その配列には要素が何もありません。
そこに、基本16色の配列を追加することで、選択リストの一覧に、16個の色名が表示されるようになります。

────────────────────
リストビュー1の詳細一覧を、配列に変える
────────────────────
項目が、色名の一つだけなので、この配列は「1次配列」であり、本来なら「リストボックス」を使うところなのですが、「リストビュー」をここでは使っています。
理由は、リストボックスには「選択された」というイベント手順がなく、「クリックされた」というイベント手順しかないためです。
「クリックされた」の手順は、文字通り マウスでクリックしないと発生しない(動作しない)ため、キーボードの上下矢印キーで動作する「選択された」の手順のあるリストビューを、あえてここでは使っています。
逆に言うと、「選択された」手順を使う必要のない場合は、1次配列を表示するには「リストボックス」を使えばいいということになります。

リストビューの一覧も配列ですが、選択リストとは項目(要素)を追加する手順(設定項目)に違いがあります。
リストビューは2次配列なので、単なる「一覧」ではなく、2次配列を表す「詳細一覧」を使います。
※2次配列とリストビューについては、後の回で説明します。

────────────────────
選択リスト1が選択された時の手順
配列は、選択リスト1の一覧
値は、選択リスト1の選択番号
テキスト1の内容を、配列([値])に変える
終わり
────────────────────

選択リストの場合は、リストビューの手順「選択内容に変える」が使えないため、選択リストの一覧を配列の形で取得して、そのうちの何番目の項目が選択されているかどうかによって、その内容をテキストに表示するようにしています。

 → 次の記事「配列 その3」へ続く。
posted by yanikun at 05:40| Comment(0) | TrackBack(0) | produire

配列 その3

■文字列を配列へ変換する

文字列を配列の形に変換するには、「区切ったもの」手順を使います。
これは、たとえば設定ファイルに書き出した一覧を配列の形で取得してリスト部品に表示する時などに使える手順です。
ここでは、前回紹介したプログラムの中で使用した色名の一覧を、設定ファイルに設定してあるという仮定に基づいて、プログラムの例を紹介します。

◆設定ファイル:
──────────────────────────────
[色名]
一覧=black #010203,white #FFFFFF,red #FF0000,yellow #FFFF00,lime #00FF00,green #008000,olive #808000,aqua #00FFFF,blue #0000FF,navy #000080,teal #008080,fuchsia #FF00FF,purple #800080,maroon #800000,gray #808080,silver #C0C0C0
──────────────────────────────

◆プログラム:
──────────────────────────────
文字1は、アプリ設定:「色名」から「一覧」を取得したもの
配列は、文字1を「,」で区切ったもの
──────────────────────────────

■配列を文字列に変換する

これとは逆に、配列を文字列に変換するには、「繋げたもの」手順を使います。

──────────────────────────────
配列は、{「black #010203」、「white #FFFFFF」、「red #FF0000」、「yellow #FFFF00」、「lime #00FF00」、「green #008000」、「olive #808000」、「aqua #00FFFF」、「blue #0000FF」、「navy #000080」、「teal #008080」、「fuchsia #FF00FF」、「purple #800080」、「maroon #800000」、「gray #808080」、「silver #C0C0C0」}
文字1は、配列を「,」で繋げたもの
アプリ設定:「色名」で「一覧」へ「[文字1]」を設定する
──────────────────────────────

※設定ファイルに、配列をそのままの形で設定すると、後の処理が面倒になることがあります。そういう時には、上の例のように文字列に変換してから保存しておき、呼び出して使う時に配列に直してやるとスムースに動く場合があります。

 → 次の記事「配列 その4」へ続く。
posted by yanikun at 05:44| Comment(0) | TrackBack(0) | produire