BASIC50周年記念
米国のダートマス大学で世界最初のBASICプログラムの実行に成功してから去る5月1日で50周年を迎えたとのこと。
BASICは僕のコンピュータ人生にとって切っても切り離せないほど深く関わりのある言語です。そもそも最初に作ったプログラムもBASICでした。
記憶も曖昧になっていますが、使ったことのある主なBASIC言語を挙げてみましょう。いずれもWindows以前のものです。
- CASIO BASIC
- F-BASIC
- BASIC09
- F-BASIC(CP/M86)
- P-TOS BASIC
- BASIC(PC-DOS)
- Quick Basic
BASICによるフィールド整理
業務用のシステムはBASICには向いていないので使えませんが、パソコンで細かなことをするには便利な場合があります。
たとえば、数十万件のレコードがあって、フィールドのいくつかを結合したり、順番を入れ替えたりしたいというとき、MicrosoftExcelでは重すぎますが、BASICでプログラムを組めばいとも簡単に処理できます。そもそもExcel2003以前のバージョンでは全部を読み込むことすらできません。
いまさらBASICと不思議に思われるでしょうが、Windows上で動作する『(仮称)十進BASIC』を使った実例を紹介しましょう。これは簡単に応用が利きます。
『(仮称)十進BASIC』に関しては、こちらを参照してください。
パソコンで金額計算する場合、浮動小数点演算による誤差が問題となりますが、これは十進数(BCD=Binary-coded decimal=二進化十進数)を使っていますから、誤差の心配がありません。
AvocadoMixでは郵便番号検索サービスと個別事業所番号検索サービスを提供しています。この元となるデータは郵便局の郵便番号データダウンロードページに毎月月末ごろに新規データがアップロードされますので、月初に落としてAvocadoMixのデータベースを更新しています。
そのうち、郵便番号データの処理手順を簡単に書くと以下のようになります。
- 郵便局のサイトからダウンロードする。(ken_all.lzh)
- その圧縮ファイルを解凍する。(KEN_ALL.CSV)
- フィールドの整理をする。(BASICプログラムの実行:yubinbango.csvの生成)
- Shift-JISからUTF-8にコード変換する。
- データベースサーバー上の当該テーブルを空にする。
- 当該データベーステーブルにyubinbango.csvをインポートする。
事業所の個別郵便番号の方も同じ手順で実行します。
この手順の中で、フィールドの整理をする段階でBASICプログラムを使っています。
まず、郵便局サイトからダウンロードした圧縮ファイルを解凍するとKEN_ALL.CSVというCSVファイルが出来ます。そのフィールドは以下のようになっています。
一連番号 | 旧郵便番号 | 新郵便番号 | カナ | カナ | カナ | 都道府県 | 市区町村 | 所番地 | フラグ | フラグ | フラグ | フラグ | フラグ |
ここで、カナはそれぞれ都道府県、市区町村、所番地の検索用半角カタカナです。またフラグには0か1の数値が入っています。
また、AvocadoMixの方は以下のように検索に必要にして充分なフィールドにしています。
一連番号(整数) | 旧郵便番号(文字型12バイト) | 新郵便番号(文字型12バイト) | 住所(文字型255バイト) |
郵便局のフィールド構造からAvocadoMixのそれに合わせる為に、以下のような処理を行います。
一連番号 | → | 一連番号 |
旧郵便番号 | → | 旧郵便番号 |
新郵便番号 | → | 新郵便番号 | 都道府県+市区町村+所番地 | → | 住所 |
その他のフィールド | → | (ドロップ) |
US-2 in Atsugi
そのBASICプログラムがこれです。
以下に各ステップの解説を書きます。
- 画面にタイトルを表示します。
- いきなり開始するわけにはいかないので、プロンプトを表示して、実行の確認を求めます。何を入力しても(何も入力しないでエンターキーだけでも)実行を開始します。
- 何も表示しないと、動いているのかどうか不明なので、一応その旨を表示します。
- 入力ファイル「KEN_ALL.CSV」をファイル番号1番として開きます。
- 出力ファイル「yubinbango.csv」をファイル番号2番として開きます。
- DOループを開始します。(DOからLOOPの間を無限に繰り返す)
- ファイル番号1番からレコードをひとつ読み込みます。もし無かったらDOループを抜けます。:読み込む変数のリスト(後に$が付いているのは文字型、無いものは数値型)
- 都道府県と市区町村と所番地を住所に結合させる演算をします。
- ファイル番号2番に1レコード(一連番号、旧郵便番号、新郵便番号、住所)を書き出します。
- DOループはここまで
- ファイル番号1番を閉じます。
- ファイル番号2番を閉じます。
- 終了のメッセージを表示します。そうしないと終わったかどうかが分かりづらいので。
- プログラムの終わり
事業所の個別郵便番号の変換プログラムもほぼ同じものです。以下に載せます。
以上、とても簡潔なプログラムですが、毎月便利に使っています。2014年4月30日のデータでは、郵便番号の方が123,686件、事業所の個別郵便番号の方が22,110件のレコードでした。これだけのデータをいとも簡単に処理できるのです。
P-1 in Atsugi
応用のしかた
Excelの大量レコードを処理する場合を例に説明します。
- 事前に(仮称)十進BASICをインストールしておきます。
- ExcelのワークシートからCSVファイルを作成します。コンマ区切りのテキストファイルです。(例:file_a.csv)
- (仮称)十進BASICを起動します。
- このページのBASICプログラム部分をコピーして、テキストエディタにペーストします。
- 先ほど作ったCSVファイルと同じフォルダー内に拡張子をbasとして保存します。(例:test.bas)
- さらに、入力ファイル名と出力ファイル名を書き換えます。(出力ファイル例:file_b.csv)
- さらに、入力ファイルのフィールド名と出力ファイルのフィールド名を書き換えます。ここで注意するのは、文字型変数の場合は変数名の最後に$を付けることです。
- 結合したいフィールドがあれば、その演算を書きます。
- 改めて、修正したプログラムを上書き保存します。
- プログラムを実行します。
- 生成されたCSVファイルをExcelで読み込みます。
- 結果を確認します。
その他にもいろいろと応用してみてください。
2014年5月11日 記