簡単CSVデータベース


簡単なデータベースが作りたんだけど・・・

 VB(マイクロソフトのプログラミング言語)やAccess(マイクロソフトのデータベースソフト)だと、ちょっとしたデータベースを作ったり、そのデータベースを人様に配布するのが大変です!!
 そこで、今回は、ひまわりを使って、簡単なデータベースを作ったり、エクセルで作った表を、ひまわりで集計しようという企画です。

CSVって何?

 前項で、二次元配列は、CSV形式であると説明しましたが、ここでは、CSV形式というものを、完全に理解しましょう。
 CSV形式とは、Excel なんかでも、扱うことの出来る汎用的な、データファイルの形式です。これを使うと、Excelで作ったファイルを、筆ぐるめなどの住所録・はがき印刷のソフトへ、データを移すことが出来ます。 
 では、CSV形式って、どういうものでしょうか?実際、Excelで作ったものを、メモ帳などで、開いてみれば分かります。
ここでは、エクセルで作ったデータを、CSV形式で保存し、メモ帳で表示させる方法を説明します。

手順1:適当に、エクセルに値を書き込みます。


手順2:メニューから、[ファイル]-[名前をつけて保存] を選択し、CSV形式で保存します。


手順3:作られたCSVファイルをメモ帳で開きます。
マウスで、メモ帳に、CSVファイルをドロップ(重ねる)か、メモ帳のメニューの[ファイル]-[開く]から、CSVファイルを選択します。
それで上のエクセル画像のファイルを、実際に開いたものがこれです。
商品名,単価,個数
幸せリング,5000,3
本物タイムマシン,13000,2
やせる指輪,800,12
各列は、カンマ( , )で区切られています。
これが、一行ずつ書いてあります。

少し、この並びを抽象的に書くと、以下のようになります。
"データ1", "データ2", "データ3", "データ4"...
"データ1", "データ2", "データ3", "データ4"...
"データ1", "データ2", "データ3", "データ4"...


こうしてみると、CSV形式とは、非常に単純なものだということが、分かってもらえると思います。(今回、このCSV形式が重要ですので、分からない人は、エクセルを使って(上の手順で)、いろいろなデータを、CSVで保存して、眺めてみると良いでしょう。
 そこで、話をひまわりに戻します。
 ひまわりで、配列変数とは、即ち、CSV形式です。ですから、ひまわりで、配列変数を書いて、それをそのまま、ファイルに保存すると、なんと、エクセルでもそれが読めてしまう!!という訳です。(ガーン!)
 見事な、エクセルとひまわりの連携プレイです。
{CSV形式で、ファイルへ保存}
データ#0#0=「品名」。データ#1#0=「値段」。
データ#0#1=「さば」。データ#1#1=「580」。
データ#0#2=「さけ」。データ#1#2=「700」。
それは、データ。
「test.csv」へ、書く。{←ファイルへ保存}
「test.csv」を、起動。{←たぶんエクセルが起動する}
 どうでしょうか。エクセルをインストールしている人なら、エクセルが立ち上がって、魚屋の気分が味わえたと思います。(拡張子 csv は、普通エクセルと関連付けられていますから。)
補足:
 世の中には、『有名なものが嫌い、みんなが使っているものは使いたくない』という変わった人がいます。そういった人は、会社で積極的に使われる『エクセル』が嫌いだと、言い切って、自分のパソコンには、わざとエクセルがインストールしていなかったりします。
 また、普通、パソコンを新規購入すると、だいたいにして、エクセルと、ワードがインストールされているものですが、自作パソコン組や、安いパソコンを買った人は、パソコンに、エクセルとワードが入っていません。
 そんな人が、上の説明を読むと、「CSVを理解するには、エクセルをインストールしないといけないのかぁ・・・憂鬱だな」と、思うかもしれません。それでは、困ったことですので、エクセルの代わりに、ひまわりを使ってみましょう。
CSV形式をテストするためのプログラム。エクセルがなくてもCSVのテスト。
{CSVのテスト}
母艦の、タイトルは、『CSVファイルのテスト』
母艦の、幅は、640
母艦の、高さは、400
灰色で、画面クリア。

(10,0)へ、移動。
「グリッドと、CSV形式のメモの、相互変換します。」と、表示。
(10,280)へ、移動。
「グリッドのセルをダブルクリックすると編集が出来ます。」と、表示。

表示グリッドを、グリッドとして、作成。
その、サイズは、(0,30,290,220)
その、編集は、オン。
その、アイテムは、『ID, 商品, 金額
1, 青いにんじん, 500
2, 紫のトマト, 300
3, 怖いぬいぐるみ, 1300』’グリッドの初期値

編集メモを、メモとして、作成。
その、サイズは、(300,30,590,220)

グリッドボタンを、ボタンとして、作成。
その、テキストは、「グリッドの内容をCSV形式に変換」
その、サイズは、(0,220,290,250)
その、イベントは、(編集メモ=表示グリッドの、アイテム。)。

メモボタンを、ボタンとして、作成。
その、テキストは、「メモの内容(CSV)をグリッドに表示」
その、サイズは、(300,220,590,250)
その、イベントは、(表示グリッドの、アイテムは、編集メモ)。

待機。
↑を、実行して左側のグリッドの内容を書き換えて、CSV形式に変換させてみましょう。CSVとは、一体何であるのかを理解できると思います。

グリッドへデータを表示しよう!

 次に、CSVファイルの内容を、簡単に一覧表示してみましょう。
 これも、ひまわりなら、簡単です。
{グリッドに test.csv の内容を表示}
「test.csv」を、読む。
表示グリッドを、グリッドとして、作成。
その、アイテムを、それに、設定。
一行目で、ファイル「test.csv」を、読み込みます。そして、二行目で、表示用のグリッドを作成し、三行目で、そのアイテム(表示する内容)を、それ(=test.csvの内容)に設定しています。

文字列・配列の命令を駆使して、実用的なデータベースを作ろう!

 簡単、簡単と、口で言っていても、実際にやってみると、思ったより簡単に行かないのが、現実です。
 それでは実際に、簡単なデータベースを作ってみましょう。
 以下の、サンプルプログラムは、商品名と値段だけを扱う、いたってシンプルなデータベースです。「商品追加」ボタンを押すと、エディタに書き入れてある商品が、データベースに追加されます。
{商品データベース}

*GUI部品を作成
灰色で、画面クリア。
文字サイズは、9

(10,10)へ、移動。
「商品名」を、表示。
商品名エディタを、エディタとして、作成。

「値段」を、表示。
値段エディタを、エディタとして、作成。

登録ボタンを、ボタンとして、作成。
その、テキストは、「登録」
その、イベントは、商品登録。

商品グリッドを、グリッドとして、作成。
その、アイテムは、『商品名,値段
マウス,2200
キーボード,5200
液晶パネル,8200』'データベース初期値

保存ボタンを、ボタンとして、作成。
その、テキストは、「ファイルへ保存」
その、イベントは、データ保存処理。

開くボタンを、ボタンとして、作成。
その、テキストは、「ファイルを開く」
その、イベントは、データ読込処理。

待機。

*商品登録
商品グリッドの、アイテムを、商品データに、得る。
'商品データの最後へ新規商品を追加する
商品数=要素数(商品データ)
商品データ#0#商品数=商品名エディタ
商品データ#1#商品数=値段エディタ
'グリッドへ戻す
商品グリッドの、アイテムは、商品データ。
待機。

*データ保存処理
『csv』の、書込ファイル選択。
もし、それが、「」ならば、待機。'キャンセルの時
ファイル名は、それ。
それは、商品グリッドの、アイテム。
ファイル名へ、保存。
待機。

*データ読込処理
『csv』の、読込ファイル選択。
もし、それが、「」ならば、待機。'キャンセルの時
ファイル名は、それ。
ファイル名を、開く。
商品グリッドの、アイテムは、それ。
待機。
・検索処理
 次に、データを検索する方法です。
「test.csv」を、読む。
データは、それ。
データの、0列目から、「さば」を、表検索。
もし、それが、0以上ならば、「発見!{データ#それ}円!」と、言う。
こちらも、それとなく、簡単です。
条件にあう次のデータを検索するときは、「表検索次の値」で、次の値が得られます。
あ=「apple,300
orange,400
banana,600
orange2,300
banana2,800
apple2,400」

あの,0列目から,『banana』を,表曖昧検索。
(あ#それ)と、表示。
表検索次の値。
(あ#それ)と、表示。
より、複雑な検索をしたい場合は、「反復」を使って、全てのデータを調査します。
※文字列・配列に関する命令には、便利なものが多く存在するので、命令一覧でチェックしてみてください。

表条件抽出

上記の検索の方法だと、特定の条件のデータを抽出するのが大変です。
そこで、「表条件抽出」命令を使うことで、任意のデータを抽出するのが簡単になります。

表条件抽出を使うには、CSVデータの一番上のラインに、フィールド名をつけておく必要があります。
例えば、上記の例で言えば、「果物の名前, 値段」という要領です。
果物データ=「ID,名前,値段,産地
1,りんご,500,青森
2,みかん,200,静岡
3,バナナ,380,ブラジル
4,なし,300,青森」

果物グリッドを、グリッドとして、作成。
その、アイテムは、果物データ。
「値段が300円以上のものを抽出」と、言う。
果物データを、「値段>=300」で、表条件抽出。
果物グリッドの、アイテムは、それ。
上の例では、値段が300円以上のものを、二次元配列(CSVの表)から抽出する例です。

この「表条件抽出」は、さらに、「かつ、」「または、」のような、条件の論理的な抽出や()を使っての優先順位をつけることが出来ます。
果物データ=「ID,名前,値段,産地
1,りんご,500,青森
2,みかん,200,静岡
3,バナナ,380,ブラジル
4,なし,300,青森」


果物グリッドを、グリッドとして、作成。
その、アイテムは、果物データ。
条件は、『(値段>=300、かつ、産地=「青森」)または、名前=「みかん」』
「{条件}のものを抽出」と、言う。
果物データを、条件で、表条件抽出。
果物グリッドの、アイテムは、それ。

※文字列を抽出する場合は、明確に、「文字列」と、「」,『』,"",または,`` で括ってください。条件に論理語(かつ、または)を利用する場合は、必ず、「かつ」、「または」の後に、空白か、「、」句点を入れてください。かつ、またはの代わりに、「AND」「OR」を書くことも出来ます。
文字列の条件には、
果物データを、『名前=「み*」』で、表条件抽出。'結果:みかんが返ってくる
の、ようなワイルドカードも利用できます。

また、日付・日時を、条件に書きたい場合は、日付の前に、#を書くことで、日付と認識します。
以下の例を参考にしてください。
日記データは、『日付,出来事
2001/10/1, クジラ飛行机の誕生日。めでたい。
2001/11/11,日付に1が5つ並んだ。めでたい。
2001/12/6, クジラ飛行机、オンライン大賞で入賞。めでたい。
2001/12/10, 企業視察会。たくさん人が来た。疲れた。』


日記グリッドを、グリッドとして、作成。
その、アイテムは、日記データ。
条件は、『日付>#2001/12/1』
「{条件}で条件抽出します」と、言う。
日記データを,条件,表条件抽出
日記グリッドの、アイテムは、それ。

表の並び替え

ひまわりなら、表の並び替え(ソート)もお手の物です。
だいたいにして、並び替えをしたいような、表(CSV)データの、一行目は、フィールド名が指定されていますので、「表フィールド名=オン」と、指定してから、表ソート命令を使います。
果物データ=「ID,名前,値段,産地
1,りんご,500,青森
2,みかん,200,静岡
3,バナナ,380,ブラジル
4,なし,300,青森」


果物グリッドを、グリッドとして、作成。
その、アイテムは、果物データ。
表フィールド名=オン
「産地でソートします」と、言う。
果物データの,3列目を,表ソート
果物グリッドの、アイテムは、それ。
※数値や、日付でソートしたい場合は、同じように「表数値ソート」、「表日付ソート」を利用します。

表の集計

表の集計をしてみましょう!
家計簿=日付, 内容, 金額
2001/10/1, 給料,98500
2001/10/3, Mバーガーで昼食, -600
2001/10/3, Sレストランで夕食,-800
2001/10/4, 食材1週間分,-5000
2001/10/5, ギター購入,-13000
2001/10/7, 雑誌ひまわり,-1000』

表フィールド名=オン。
家計簿の,2列目の,表合計
「今月残りは、{それ}円です。」と、言う。
オリジナルの家計簿ソフトを作ったりするのに、役に立ちそうです。

目次へ戻る / 次へ