【コラム】

日本語で10行プログラミング

75 英単語帳を作成する(その1)

75/90

開発日記~台湾訪問

先日、台湾へ行ってきました。成田から飛行機で3時間、とても近い所です。私は学生時代に中国語を学んだのですが、国内の生活では話す機会がなく、何年も使っていませんでした。しかし、5日間の滞在ではありましたが、現地の人と中国語で会話をすることができて、とても楽しかったです。

英単語帳の作成(その1)

海外から帰ってくると、いつも「次に旅行や出張へ行くときに備えて、もっと外国語の能力を高めておかなくては!」と決意します。しかし1カ月も経つと、そんなことはすっかり忘れてしまうものです。そこで今回は、英単語を学習するための単語帳を作ってみます。自作の単語帳を使って英単語を覚えましょう。

それではさっそく単語帳を作り始めます。プログラムを作ろうと思ったときにするべきことは、まず設計です。ちょっとしたプログラムを作るときに、大げさな設計図を描く必要はありません。

しかし、簡単なプログラムを作るのでも一度頭の中を整理するために、どんなプログラムを作るのか? どうやって必要な機能を実現しようか? など考えてみると、完成するプログラムの質が変わってくると思います。

どんな単語帳を作るのか?

どんな単語帳を作るか構想を練ってみましょう。単語帳と聞いてまず思い出されるのが、学生時代に愛用した小さなカード式の単語帳でしょう。カードの表に英単語を、裏に単語の意味を書いておき、通学途中などで身近に持ち歩いて使った記憶、皆さんもあるでしょう。

今回作る単語帳も基本的にはカード式の単語帳と同じで、はじめに画面に問題が表示され、ボタンをクリックするとその答えが表示されるというシンプルなものを作ってみます。カード式の単語帳が、めくる方向を変えることで英語から日本語、日本語から英語と問題を変えられるので、この機能も作りたいと思います。

こう考えていくと、どうやら大きく2つに機能を分けることができそうです。まずは単語データを入力する機能、そして単語データを元に問題を出題する機能です。この2つの機能を一度に作るのは大変なので、今回はデータの入力処理を行うプログラムを作り、次回、問題の出題プログラムを作ることにします。

どんな画面にするか?

単語帳の機能が決まったところで、ラフな画面デザインを考えてみましょう。と言っても、今回は自分でボタンやエディタなどの部品を画面に配置するほど、高度なレイアウトは必要ないと思います。

なでしこには初めから文字を表示したり、複数項目のデータを入力するためのダイアログが用意されていますので、これを利用しようと思います。

「言う」のダイアログ

一行の文章を表示するのに使うのが、「言う」命令です。以下は、簡単な利用です。

「こんにちは」と言う。

「言う」命令のダイアログ

これを使って、問題や答えを表示することにします。

「項目記入」のダイアログ

次に、英単語と、その意味を入力するときに、「項目記入」命令を利用します。これは、複数の項目を一度に入力するのに適したダイアログです。以下が利用例です。

# --- 入力 ---
「英単語=
意味=」の項目記入。
# --- 確認 ---
それ@「英単語」を言う。
それ@「意味」を言う。

項目記入では複数の項目を一度に入力することができます

「項目記入」命令の引数には、記入したい項目を一行に1つずつ書いておくだけです。その一行には「項目=値」のように書くことで、入力項目に初期値を加えることもできます。

そして、ユーザーが入力した内容は、変数「それ」に代入されます。「それ」の内容をそのまま表示すると、「項目=値」のように表示されます。

このとき、上の例のように、『それ@「英単語」』のように書くと、英単語の値だけを取り出して表示することができます。

データ形式はどうするか?

それから、単語帳のデータ形式を決めましょう。単語を入力したら、入力したデータをファイルなどに保存することを考えてみます。単語データをファイルごとに分けて保存することで、英単語をレベルや用途に分けて使い分けることができるようになり、利便性が高くなります。

保存するデータは、英単語と意味の2項目です。20個問題を作ったなら、英単語と意味の組み合わせを20個保存します。このようなデータを保存するのに適しているのは、以下の図のような、表計算ソフト「Excel」のような二次元の表です。

二次元の表(CSV形式)

なでしこでのプログラミングは、こうした二次元の表を取り扱うのに汎用的なCSV(カンマ区切りデータ)形式が便利。CSV形式は水平方向(列)をカンマで区切り、垂直方向(行)を改行で区切った単純なデータです。上の表をCSV形式で表すと以下のようになります。

dog,イヌ
cat,ネコ
mouse,ネズミ
hippopotamus,カバ

CSV形式~カンマ「,」を利用してデータの区切りを表しています。

プログラムの流れ

今回作るプログラムは、ユーザーに英単語と意味を入力してもらい、これをCSV形式で保存するというプログラムです。これを実際になでしこでプログラミングしていくわけですが、作る前にプログラムの流れを確認しておきたいと思います。

  1. データの入力処理
  2. 以下の3~5の処理を繰り返し行う
  3. 英単語と意味を入力するダイアログを出す
  4. キャンセルが押されたら、6の保存処理へ
  5. 入力されたデータを、変数「単語データ」に追加する
  6. データの保存処理
  7. 保存するファイルを選択するダイアログを出す
  8. 変数「単語データ」の内容をファイルへ保存する

肝となるのが、データを繰り返し入力する処理です。データ入力を始める段階では、いくつの単語を入力するのか分からないので、ひたすら処理を繰り返すように「~の間」構文を作っておきます。そしてキャンセルが押されたら、繰り返しから抜けるようにします。

10行プログラム

以下が、なでしこで作った単語データ入力プログラムです。

単語データは空。#1
真の間 #2
  「英単語={改行}意味=」の項目記入。#3
  もし、それが空ならば、抜ける。#4
  英単語=それ@「英単語」。#5
  意味=それ@「意味」。#6
  単語データ=単語データ&「{英単語},{意味}{改行}」。#7
「.csv」の保存ファイル選択してファイル名に代入。#8
もし、ファイル名が空ならば、終わり。#9
単語データをファイル名に保存。終わり。#10

1行目では、入力されたデータを覚えておくための変数「単語データ」を初期化します。2行目では、「~の間」構文を利用して、以降のインデント(字下げ)された範囲を繰り返します。「真の間」と書くと、何度も繰り返します。3行目では、「項目記入」命令を利用して英単語と意味を入力します。4行目では、キャンセルボタンが押されたときに、「~の間」構文の繰り返しから抜けるように指示しています。

5~6行目では、ユーザーが入力したデータから英単語と意味の値を取り出して、それぞれ変数に代入しています。7行目では、変数「単語データ」へカンマ区切りのCSV形式になるような書式で値を追加します。8行目では、保存先のファイル名を尋ねて、変数「ファイル名」に代入しています。9行目では、キャンセルが押されたなら保存しないように処理を完全に終わらせてしまいます。10行目では、「保存」命令でユーザーの指定したファイルへ単語データを保存しています。

プログラムの実行

プログラムを実行すると、単語を入力するダイアログが開きます。そこで単語を入力して[決定]ボタンを押すと、次の単語入力に移ります。もし、単語の入力をやめるときは、[取消]ボタン(キャンセルボタン)を押します。

実行画面:単語を入力します

入力を終えると単語データを保存するダイアログが開きます。保存したい名前をつけて保存しましょう。

実行画面:入力が終わったら保存ファイルを指定します

入力されたデータはCSV形式で保存されます。ExcelでもCSV形式のファイルが読めるので、入力した結果を確認することができます。

実行画面:保存したデータをExcelで確認したところ

改造のヒント

今回のプログラムでは、データを入力して保存するというだけのプログラムになっています。そのためデータを一覧表示させたり、部分的に修正したりといった編集機能がありません。もし余力があれば、既に入力した単語データを閲覧・編集するプログラムも作ってみてください。次回は今回入力した単語データを元に、問題を出題するプログラムを作ってみたいと思います。

75/90

インデックス

連載目次
第90回 10行プログラミング最終回~10行プログラミングを振り返って
第89回 フォルダ一括圧縮
第88回 テキストエディタに貼り付けたExcelの表を見やすく整形する
第87回 一発加算電卓
第86回 ブログにHTMLソースを貼れるよう変換する
第85回 カード式メモ帳
第84回 時間電卓を作る
第83回 アスキーアート地図エディタ
第82回 縦書き風テキスト作成ツール
第81回 Excelシートの比較を行う
第80回 ノルマ計算機
第79回 高速バックアップ
第78回 単語帳に読み上げ機能をつける
第77回 ホームページのバックアップツール
第76回 英単語帳を作成する(その2)
第75回 英単語帳を作成する(その1)
第74回 メモリカード挿入でデータをコピーするツール
第73回 モールス信号ソフトの作成
第72回 フォトCDランチャーを作る
第71回 残暑見舞い作成ツールを作る
第70回 画面キャプチャプログラムを作る
第69回 様々なルールに対応するビンゴシートのプログラムを作る
第68回 ビンゴカードを作る
第67回 ビンゴマシンを作る
第66回 パスワードマネージャの作成
第65回 アンドゥ機能をつける
第64回 テキストの比較ツール~FCフロントエンド
第63回 システム情報クリップ
第62回 飲み会電卓を作る
第61回 バイナリエディタの作成
第60回 メールフッタ作成ツール(その2)
第59回 メールフッタ作成ツール(その1)
第58回 プロセス監視ツールを作成する
第57回 TODOメモを作る
第56回 携帯電話をテキストリーダーに使う(2)
第55回 携帯電話をテキストリーダーに使う(1)
第54回 「オープンソースカンファレンス2006 Tokyo/Spring」に参加しました
第53回 10行でチャットソフトを作る(2)
第52回 10行でチャットソフトを作る(1)
第51回 プレゼンタイマーを作る
第50回 カラーピッカーを作る
第49回 簡単な暗号作成プログラム
第48回 お手軽データベース「SQLite」を使う
第47回 CUI(コマンドライン)環境を拡張する
第46回 デスクトップ画像を記録するプログラム
第45回 市外局番で住所を調べる検索プログラム
第44回 コマンドライン型ランチャーを作る
第43回 文字数カウンタを作る
第42回 日本語でバッチ処理
第41回 イベントドリブンと電光掲示板
第40回 なでしこでWindowsの「送る」メニューを使いやすくする
第39回 同人音楽即売会M3に参加して思ったこと
第38回 画像のサムネイル作成
第37回 なでしことExcelで行事予定カレンダーを作ろう
第36回 なでしことExcelで月間カレンダーを作ろう!
第35回 なでしことExcelで年間カレンダーを作ろう
第34回 急な電話にも安心、意外と便利な「手書きメモ」
第33回 携帯電話のアドレスデータを取り出す
第32回 記念日カウンターを作る
第31回 顔文字入力支援ソフト
第30回 アスキーアートのためのエディタ
第29回 HTTPサーバーを作る
第28回 手紙のあいさつ文を作成するプログラム
第27回 ギターコードの構成音を表示
第26回 音楽の再生スピードを変える
第25回 ミニスライドショーを作る
第24回 撮影日で写真を振り分け
第23回 PSP用テキスト画像の作成
第22回 金種計算
第21回 パスワードを自動生成
第20回 携帯メールでWEBを更新する
第19回 時間の使い方を反省するプログラム
第18回 ウェブを画像でキャプチャ
第17回 ラーメンタイマーを作る
第16回 画像のトリミングツール
第15回 ごみの分別カレンダー
第14回 デスクトップ検索ツール
第13回 フォント見本帳
第12回 セピア調の画像ビューワー
第11回 健康チェック
第10回 10行で壁紙にらくがきする
第9回 WEBサイトの更新チェッカー
第8回 WEBページのリンク切れをチェック その2
第7回 WEBページのリンク切れをチェック
第6回 音楽ファイルの整理 - メディアタグから自動フォルダ分類
第5回 請求書の自動作成・印刷~Word連携技
第4回 重要データのバックアップ術
第3回 10行ニュースリーダーを作ろう!
第2回 なでしことは その2
第1回 なでしことは? その1

もっと見る

人気記事

一覧

イチオシ記事

新着記事