PR

 本連載では、趣味や仕事に役立つプログラムを作りながら、プログラミングの便利さを体験していきます。プログラミングというと難しい印象がありますが、日本語プログラミング言語「なでしこ」を使って、見た目にも読みやすく、分かりやすいプログラムを作っていきます。

 前々回、ダイエットに役立つプログラムということで、体重をCSVファイルに記録していくプログラムを作りました。そして、前回は「ユーザーに質問する」ということをテーマにしてプログラムを作りました。今回は、CSVファイルの操作をテーマに、体重を記録する部分について解説したいと思います。

CSVファイルをメモ帳で見る

 前々回、簡単にCSVファイルの仕組みについて紹介しました。CSV(Comma Separated Values)とは、カンマ区切り形式と呼ばれます。多くの表計算ソフトや、ハガキ印刷ソフトの住所録データなどで扱うことができる汎用的な形式です。

 CSVの実体は、テキストファイルなので、メモ帳でも開くことができます。開いて見ると分かるのですが、二次元のデータの列(縦方向)をカンマ「,」で区切り、行(横方向)を改行で区切ったものになっています。

 ダイエットに役立つプログラムということで、メニューとカロリーの表を作ってみました。今回は、Excelを使って、以下のようにデータを入力してみました。

図1 定番メニューのカロリー表

 これを、「ファイル」-「名前を付けて保存」でCSV形式で保存します。分かりやすくデスクトップ上に保存してみます。

図2 「CSVカンマ区切り」で保存

 CSV形式で保存したら、Excelを閉じます。次にこれをメモ帳で開いてみます。メモ帳は、スタートメニューの「すべてのプログラム」-「アクセサリ」-「メモ帳」をクリックすると起動します。

 メモ帳で、先ほど保存したCSVファイルを開いてみると以下のようになっています。

図3 メモ帳で、CSVファイルを開いてみたところ

カロリー一覧を記載したcsvデータ
(お使いのブラウザーによってはデータが画面に表示されます)

CSVファイルをなでしこで見る

 次に、このCSVファイルをなでしこで開いてみます。なでしこでファイルを読み込むには「開く」命令を使います。それでは、読み込んだCSVファイルを、画面に表示させてみたいと思います。

【プログラムソース1】

「{デスクトップ}カロリー一覧.csv」を開いて、データに代入。
データを表示。

図4 なでしこでCSVファイルを開いたところ

 なでしこには、「ボタン」部品や「エディタ」部品など、Windowsのソフトでよく使われる部品が用意されています。その部品の中に、CSVファイルを表示するのに適した「グリッド」部品もあります。

 グリッド部品に、CSVファイルの内容を表示させてみます。

【プログラムソース2】

「{デスクトップ}カロリー一覧.csv」を開いて、データに代入。
カロリーグリッドとはグリッド。# グリッド部品の作成
そのアイテムは、データ。 # CSVデータを設定

図5 グリッドにCSVファイルの内容を表示させたところ

好きなデータだけをピックアップ

 なでしこで、CSV形式のデータの表示方法が分かったので、次は、CSV形式を操作する方法を見て行きたいと思います。なでしこには、CSV形式のデータを操作する命令がいくつかあります。

 その中でもよく使うのが「表ピックアップ」という命令です。これは、CSVデータの中から指定キーワードに合致するデータだけをピックアップする命令です。

これは、以下のような書式で使います。(列番号は0番から数えるので注意)

======
(CSVデータ)の(列番号)から(キーワード)を表ピックアップして、
(結果変数)に代入。
======

 では「表ピックアップ」を使って、簡単なプログラムを作ってみます。以下は、カロリー表にあるCSVデータの中から、0列目にある「ミックスフライ」を含むデータをピックアップします。(なでしこでは、列番号を左から、0列目、1列目、2列目…と数える決まりになっています。)

【プログラムソース3】

# --- (*1) CSVデータをセット
データは「メニュー,カロリー
和風ハンバーグ,561
ミックスフライ,592
オムライス,995」
# --- (*2) 取り出す
データの0から「ミックスフライ」を表ピックアップして、結果に代入。
結果を表示。

図6 表ピックアップの使用例

重複なくデータを保存

 「表ピックアップ」命令は、前々回の体重を記録するプログラムでも、過去に同じ日付を入力したのかどうか調べるのに利用しました。

 そこで、ダイエットに役立つプログラムの締めくくりとして、食べた料理のカロリーを調べるプログラムを作ってみたいと思います。

 食べた料理を入力すると、カロリー一覧表を調べて、カロリーを表示します。ただし、表にない料理が入力された場合は、カロリーを入力するように促します。もし、カロリーが入力されると、その料理とカロリーを重複なく保存していくというプログラムです。

 「表ピックアップ」命令では、取り出したい語句に合致するデータがないと、空の状態を返します。ですので、カロリー一覧のCSVデータから、料理名をキーワードにして「表ピックアップ」を行い、もし、空でなければ、その内容を画面に表示し、空だったら、ユーザーにカロリーを入力するようにダイアログを表示するようにします。

 ちょっと動作が複雑なので、箇条書きにしてみました。

(1)カロリー一覧のCSVファイルを読み込んでおく
(2)ユーザーが料理名を入力する
(3)一覧に料理名があるか調べる。あれば(4)に、なければ(5)へ。
(4)料理のカロリーを表示して終了する。
(5)ユーザーにカロリーを尋ねる。
(6)正しく入力があれば、CSVデータに追加する。
(7)ファイルへ保存して終了する。

 これを実際のなでしこのプログラムにしたのが以下です。プログラム中の(#番号)が上の箇条書きの番号と対応している部分です。

【プログラムソース4】

# ------------------------------------
# カロリー検索&記録プログラム
# ------------------------------------
データファイルは「{デスクトップ}カロリー一覧.csv」。
データファイルを開いて、一覧に代入。 #1
「料理名は?」と尋ねて、料理名に代入。#2
一覧の0から料理名を表ピックアップして、結果に代入。#3
もし、結果≠空ならば #4
  料理=結果[0,0]
  カロリー=結果[0,1]
  「{料理}は、{カロリー}kcalです。」と言う。
違えば
  「{料理名}のカロリーは?」と尋ねて、カロリーに代入。#5
  一覧=一覧&「{料理名},{カロリー}」
  一覧をデータファイルへ保存。
終わる。

※プログラム中の#4以下で、結果の中から、「料理」と「カロリー」を取り出していますが、これは、CSVデータの任意のセルを取り出しています。例えば、「結果[0,1]」 と書くと、CSVデータの0行目1列目にあるセルを取り出します。これによって、料理名とカロリーを別の変数に取り出しているのです。

まとめ

 CSVファイルの処理について、「表ピックアップ」を例にとって見てきました。

 オフィスでの事務処理では、よくExcelを使います。なでしこでは、直接Excelを操作して処理を行うことができますが、今回のように、一度CSVファイルに変換しておけば、より手軽にデータを加工することができます。

 なでしこのCSVデータの操作命令は、「表ピックアップ」以外にも、データを並べ替えたり、行と列を入れ替えたり合計を調べたりと、いろいろありますので、これら便利な命令についても、今後の連載で紹介できたらと思います。

はじめてこの連載を読む方へ
 この連載では、日本語でプログラムが書ける「なでしこ」というツールを使って仕事に役立ちそうなプログラムを紹介しています。なでしこのプログラムエディター(なでしこエディタ)に、記事中で紹介しているプログラムソースをコピー・アンド・ペーストし、実行ボタンを押すだけで、プログラムを動作させることができます。詳しい内容は本連載第1回をご覧ください。


【PCオンライン編集部からのお願い】
「なでしこ」は個々のユーザーの責任において利用してください。
コラムで紹介するなでしこのプログラム動作については編集部でも確認していますが、すべてのユーザーのパソコン環境で同じように動作することを保証するものではありません。
申し訳ありませんが、紹介する内容について、個別のご質問にはお答えしかねます。なでしこの公式ページでは詳しいマニュアルや質問を受け付ける掲示板が提供されていますので、そちらをご参照ください。
よろしくお願いいたします。