# 簡単CSVデータベース

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

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

## CSVって何？

> 前項で、二次元配列は、ＣＳＶ形式であると説明しましたが、ここでは、ＣＳＶ形式というものを、完全に理解しましょう。
> CSV形式とは、Excel なんかでも、扱うことの出来る汎用的な、データファイルの形式です。これを使うと、Excelで作ったファイルを、筆ぐるめなどの住所録・はがき印刷のソフトへ、データを移すことが出来ます。

> では、CSV形式って、どういうものでしょうか？実際、Excelで作ったものを、メモ帳などで、開いてみれば分かります。

> > ここでは、エクセルで作ったデータを、ＣＳＶ形式で保存し、メモ帳で表示させる方法を説明します。
> > 手順１：適当に、エクセルに値を書き込みます。 手順２：メニューから、[ファイル]-[名前をつけて保存] を選択し、ＣＳＶ形式で保存します。 手順３：作られた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形式で、ファイルへ保存｝ データ＃０＃０＝「品名」。データ＃１＃０＝「値段」。 データ＃０＃１＝「さば」。データ＃１＃１＝「580」。 データ＃０＃２＝「さけ」。データ＃１＃２＝「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ファイルの内容を、簡単に一覧表示してみましょう。
> これも、ひまわりなら、簡単です。

> `｛グリッドに　test.csv の内容を表示｝ 「test.csv」を、読む。 表示グリッドを、グリッドとして、作成。 その、アイテムを、それに、設定。`

> 一行目で、ファイル「test.csv」を、読み込みます。そして、二行目で、表示用のグリッドを作成し、三行目で、そのアイテム（表示する内容）を、それ（＝test.csvの内容）に設定しています。

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

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

> {商品データベース} ＊ＧＵＩ部品を作成 灰色で、画面クリア。 文字サイズは、9 (10,10)へ、移動。 「商品名」を、表示。 商品名エディタを、エディタとして、作成。 「値段」を、表示。 値段エディタを、エディタとして、作成。 登録ボタンを、ボタンとして、作成。 その、テキストは、「登録」 その、イベントは、商品登録。 商品グリッドを、グリッドとして、作成。 その、アイテムは、『商品名,値段 マウス,2200 キーボード,5200 液晶パネル,8200』'データベース初期値 保存ボタンを、ボタンとして、作成。 その、テキストは、「ファイルへ保存」 その、イベントは、データ保存処理。 開くボタンを、ボタンとして、作成。 その、テキストは、「ファイルを開く」 その、イベントは、データ読込処理。 待機。 ＊商品登録 商品グリッドの、アイテムを、商品データに、得る。 '商品データの最後へ新規商品を追加する 商品数=要素数(商品データ) 商品データ#0#商品数=商品名エディタ 商品データ#1#商品数=値段エディタ 'グリッドへ戻す 商品グリッドの、アイテムは、商品データ。 待機。 ＊データ保存処理 『csv』の、書込ファイル選択。 もし、それが、「」ならば、待機。'キャンセルの時 ファイル名は、それ。 それは、商品グリッドの、アイテム。 ファイル名へ、保存。 待機。 ＊データ読込処理 『csv』の、読込ファイル選択。 もし、それが、「」ならば、待機。'キャンセルの時 ファイル名は、それ。 ファイル名を、開く。 商品グリッドの、アイテムは、それ。 待機。

> ・検索処理

> 次に、データを検索する方法です。

> `「test.csv」を、読む。 データは、それ。 データの、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」で、表条件抽出。 果物グリッドの、アイテムは、それ。`

> 上の例では、値段が３００円以上のものを、二次元配列（CSVの表）から抽出する例です。
> この「表条件抽出」は、さらに、「かつ、」「または、」のような、条件の論理的な抽出や（）を使っての優先順位をつけることが出来ます。

> `果物データ=「ID,名前,値段,産地 1,りんご,500,青森 2,みかん,200,静岡 3,バナナ,380,ブラジル 4,なし,300,青森」 果物グリッドを、グリッドとして、作成。 その、アイテムは、果物データ。 条件は、『（値段>=300、かつ、産地=「青森」）または、名前=「みかん」』 「｛条件｝のものを抽出」と、言う。 果物データを、条件で、表条件抽出。 果物グリッドの、アイテムは、それ。`

> ※文字列を抽出する場合は、明確に、「文字列」と、「」,『』,"",または,`` で括ってください。条件に論理語（かつ、または）を利用する場合は、必ず、「かつ」、「または」の後に、空白か、「、」句点を入れてください。かつ、またはの代わりに、「AND」「OR」を書くことも出来ます。

> 文字列の条件には、

> 果物データを、『名前＝「み*」』で、表条件抽出。'結果：みかんが返ってくる

> の、ようなワイルドカードも利用できます。
> また、日付・日時を、条件に書きたい場合は、日付の前に、＃を書くことで、日付と認識します。
> 以下の例を参考にしてください。

> `日記データは、『日付,出来事 2001/10/1, クジラ飛行机の誕生日。めでたい。 2001/11/11,日付に１が５つ並んだ。めでたい。 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列目の,表合計。 「今月残りは、｛それ｝円です。」と、言う。`

> オリジナルの家計簿ソフトを作ったりするのに、役に立ちそうです。

目次へ戻る／次へ