I言語システム開発の入門編 6/9 (ファイルからの登録)


(6)ファイルからの登録。
☆取りあえずテスト用ファイルを作ります,メモ帳で以下の内容のファイル「c:¥市一覧.txt」として作って下さい。 (注意:このホームページはUTF-8で作られているため半角円記号が「\」(バックスラッシュ)になってしまいます, よって全角の「¥」を使っていますが正しくは半角の円記号ですので注意して下さい)
仕様:先頭◎が都道府県で以外は最後に市が有るものが市の名前。
★注意:データの前後に空白は入れないで下さい,入れると判定に失敗し誤動作します。
***(c:¥市一覧.txt)***
◎長野県
飯田市
長野市
◎愛知県
名古屋市
*******************

◎(6.1)「システム 開発 メニュー」で'21'を入力し「テスト 全 プログラム 更新」に行き。 ジョブに'ZZZZ30'で[Enter]後'←','↓'5個後,'2','ZZZZ','30','01','40','JA'はスキップ,'TEST', 'INPUT'(処理種類,更新のプログラムでは無いですが,「テーブル更新」で作成されたテーブルを更新する場合は ,「INPUT」にする必要があります),'A'(認証,管理者のみ可),'↓'でメニューに行き'ファイルから市 作成処理',[Enter]で作成します。

◎(6.2)'0'で選択します,プログラムは検索でも更新でも無いので,全てを手動で作ります。

◎(6.3)'TEST'でテスト実行し'YES'で実際に実行してみます。

◎(6.4)ZZZZ300101の「市 検索処理」で見ると'長野'と'名古屋'の2市が増えているので成功です。(飯田は既に有るのでOK)

◎(6.5)ここで,作ったプログラムを1行づつ説明します。
尚,I言語文法が「ZZZZ010101」の「ヘルプ 表示」ジョブに'ZZZZ010241','[Enter]で見られますので,参考にして下さい。
100 PROGRAM=NOT
検索でも更新でもないプログラムはNOTとします。
200 DATA=YES{3}{YES,NO}
NOTのプログラムはDATA=を何も書かないと即処理を実行しようとします,そこで,DATA=で入力をさせます。
PROGRAM=NOTではSET=は使いません。
「YES」がこのデータ名で{3}が桁数です{YES,NO}は入力できる文字をカンマ区切りで指定しています。
300 =IF{_DATA!='YES'}EXIT{_END};
DATA=の下の=で始まる命令はDATA=の入力直後に実行されます。
_DATAは現在入力中のデータを指すシステム変数でこれが'YES'以外はEXIT{_END};でプログラムの終わりに行きます。
400 =READ1_OPEN{C:¥市一覧.TXT}{}ERROR{};
READ1_OPENでファイルを開きます,READ2_OPENも有り,同時に開けるファイルは2個です。
{C:¥市一覧.TXT}でファイル名を指定します,次の{}でエンコードを指定しますが,空白にするとファイル自身のエンコードとなります。
ERROR{};はこれを書かないとエラー発生時異常終了します,ファイルが無い場合が想定されるので, 異常終了させないで,エラー表示で再入力させます。
エラーに表示する内容を空にすると,異常終了時の内容をそのままエラーとして表示します。
500 =次:READ1_NEXT{W_DATA}JUMP{終わり};
「次:」は名札でJUMPやBACKの飛び先です。
READ1_NEXT{W_DATA}でファイルから1レコード読みW_DATAに転送します。
Wで始まる名前は作業データ名でなにも定義なしでいきなり使えます,2文字目が数値とE(DATETIME)とF(FLOAT)以外は文字列と見なします。
JUMP{終わり};でファイルが終了した場合,下の方で一番近くにある「終わり:」にジャンプします。
600 IF{W_DATA[1;1]='◎'}JUMP{都道府県};
W_DATA[1;1]でW_DATAの1文字目から1文字が'◎'の時は直近の「都道府県:」にジャンプします。
700 =SET{W0LEN=W_DATA@LENGTH};
W_DATA@LENGTHでW_DATAの文字列の長さをW0LENに転送します。
800 =IF{W_DATA[W0LEN]!='市'}BACK{次};
W0LENはデータの長さですのでW_DATA[W0LEN]で最後の文字から最後までで下の1文字が'市'でないときは直近の「次:」にバックします。
900 =COMPUTE{W0LEN-=1};SET{W.~~市=W_DATA[1;W0LEN]};
COMPUTE{W0LEN-=1};でW0LENを1引き算します,COMPUTE{W0LEN=W0LEN-1};も同じですが, W0LENを一個減らせるのでこの様にもできます。
W_DATA[1;W0LEN]でW_DATAの先頭から1文字少ない長さ分をW.~~市に転送します,つまり最後の市を取った物が転送されます。
W.~~市の「~~」は最初に許可に変換されます,このプログラムの許可は「ZZZY」ですのでW.ZZZY市となります。
1000 =IF{W.~~市@LENGTH>6}ERROR{(?W.~~市?)が6文字以上};
NCHARの設定なので6文字以上でも登録される危険があるのでここで6文字以上はエラーとしています。
?W.~~市?は?内のデータ名の内容で置き換わります。
1100 =PROGRAM{?_M?市実表}{W.~~市}{W.~~都道府県}{2N};
PROGRAMは更新処理をします。{?_M?市実表}はテーブル名です。
{W.~~市}は更新のキーとなるデータ名です,SQLのデータ名は最後のピリオッド以降でこの場合「~~市」となります。
{W.~~都道府県}は更新するデータ名です,SQLのデータ名は同じく最後のピリオッド以降でこの場合「~~都道府県」となります。
{2N}の[2]は作成を指示しています,また,「N」は作成できない場合はエラーとしないで無視します,つまり, すでにデータがある場合はなにもしません。
(実際にどのようなSQL文が実行されてたかは,操作で'B',[Enter]とするとファイルに書かれており見られます)
1200 =BACK{次};
直近の「次:」にバックします。
1300 =都道府県:SET{W.~~都道府県=W_DATA[2]};
W_DATA[2]でW_DATAの2文字目から最後まで,つまり,先頭の'◎'を取った文字列をW.~~都道府県に転送します。
1400 =IF{W.~~都道府県@LENGTH>5}ERROR{(?W.~~都道府県?)が5文字以上};
W.~~都道府県の長さが5文字以上はエラーとします。
1500 =PROGRAM{?_M?都道府県実表}{W.~~都道府県}{}{2N};
?_M?都道府県実表に作成します。
1600 =BACK{次};
直近の「次:」にバックします。
1700 =終わり:READ1_CLOSE{};
終了したので,開いていたファイルをここで閉じます。
1800 =EXIT{_END};
全て終了したので,ジョブ自体を終了させます。
次へ(7/9,ひらがな項目の追加)
All Rights Reserved, Copyright (C) 2009-2010 Nobumichi Harasawa.