人気ブログランキング | 話題のタグを見る

体重と今日食べたもの

k1segawa.exblog.jp

ダイエット

ブログトップ

[BASIC for Android] スマホのBASIC言語でツールを作る(4)[BASICプログラムファイル編集] (9/18)

プログラムにデータを読み込ませるのに、別ファイルを作ってマージするか、ファイルオープンしてテキストファイルとして加工しBASICプログラムにしてセーブするか考えていたのだが、

まず、ファイルアクセスは
[編集・実行]-[SAVE]コマンドやDELETE、REPLACE、MERGEなどRUN,iだとプログラム内に記述することができるプログラム自身の編集コマンド(RUN,cやRUNだけではこのモードでは実行できないと出る)
[ファイルアクセス]-[OPEN]コマンドなどファイルを開いて編集するコマンド
[ファイル操作]-[KILL]コマンドやRENAME、COPYなどこちらもプログラム内に記述することができるファイル編集コマンド

がある。
REPLACE文が強力で、プログラム内の文字列を変更できるのにそれをプログラム内から呼び出せること。
プログラム自身書き換えて保存すれば、自己書き換えになる。
その時SAVEコマンドは実行するとプログラムが終了するので、行末に書く必要がある。

次のようにすると声で入力した文字列と一致すると、プログラムの変数の代入文字列はもちろん変数名すらも書き換えられるのだ。

100 s$=ex_recogn$(0)
110 print s$
120 a$=s$
130 print "テスト"
140 replace "s$","w$"
150 save "pged1.bas"

Run,i とすると、

100 w$=ex_recogn$(0)
110 print w$
120 a$=w$
130 print "テスト"
140 replace "w$","w$"
150 save "pged1.bas"

s$がw$になってセーブされた。

次に音声で置換させるのは、

100 w$=ex_recogn$(0)
110 print w$
120 a$=w$
130 print "テスト"
140 replace a$,"はい"
150 save "pged1.bas"

Run,i で
"テスト"と口頭で発声すると、

100 w$=ex_recogn$(0)
110 print w$
120 a$=w$
130 print "はい"
140 replace a$,"はい"
150 save "pged1.bas"

になるのだ。

もう、DATA文に直接メモを書き込めるな。
1000 DATA "メモ1"
1010 DATA "メモ2"

1000 DATA "memo1:醤油"
1010 DATA "memo2:石鹸"

に置換すればいいのだから。
メモ1をわざとmemo1にするのはメモ1に何も書き込まれていないことを知るためのフラグで、「メモ表示」時に区別するため。
表示はそのままでなくてもいいのだから先頭が「メモ」なら「1:」で空を表し、「memo」なら「1:××」でメモ内容を表示すればいい。
置換はプログラム全体を見るので、どこのDATA文か知らなくてもよいし、メモとメモ1は違うので判定に使う「メモ」という文字列は置換されない。
メモはDATA文の数に制限されるけど100ぐらいあればいいだろう。

メモコマンド
「メモを表示」「メモを追加」「メモnを削除」「メモをクリア」

これらの末尾が「を表示」「を削除」などかどうかでコマンド種別判定し、
その前部分から先頭の「メモ」を削除して文字列が""(ヌル)でないなら、それが半角数字1~100の場合(そうでなければエラー判定)メモn番目かを判定し、DATA文のメモやmemo文字列を置換する。

コマンド構造など
「メモ」+[1~100](半角数字) or 無し+「コマンド文字列」というコマンド構造になっていることが特徴で、コマンド判定後続けて音声入力するのは、「メモを追加」コマンドだけなので再度音声認識を行ってそれをDATA文のmemoの末尾またはメモ1に書き込む。

「メモnを削除」はDATA文memo nをメモnに置換し、n番目のDATA文以下のDATA文を前にコピーして詰める処理を行う。末尾処理もある。
「メモをクリア」はすべてのDATA文の「memo」+「xxxx」を「メモ」+[1~100]へ置換する。
「メモを表示」はすべてのDATA文の「memo」である部分を表示する。1つもなければ空で表示する。


「メモを挿入」「メモを並び替え」「メモを一括削除」「メモを移動」「メモを範囲表示」など、範囲などをその後に音声認識で入力するエンハンスコマンドがあってもいいかも。まあそこまで使い込まないと思うが。「メモを音声再生」はあってもいいか。

*****
別の操作体系
*****

4つのコマンドを覚えておかないといけないけど、コマンドの構造や操作体系(少なくとも2回の音声入力でコマンド+パラメータを指定する)を変えて、「メモ」で表示、「削除」「醤油」で該当するメモを削除、「追加」「歯ブラシ」でメモを追加などのオブジェクト指向的な操作体系もある。元のコマンドは手続き型かな。先頭に「メモ」が必須なのは「メモnを削除」という座標指定みたいなメモそのものを指定しない方式なため。
「メモ」「削除」+[メモ名]「追加」+[メモ名]「クリア」の4つでもメモ名というオブジェクトが後に来る方がわかりやすい?かも。
メモ名が長かったり間違った文字列、難しい文字列の場合に「削除」が難しい。その場合n番目の削除の方法もあった方がいいかな。
座標指定が難しいなら表示されたメモをタッチで削除したほうが簡単だな。それも追加かな。

メモコマンド
「メモ」「追加」「削除」「クリア」・・・さらにこれを任意の文字列にユーザカスタマイズ可能。
メモ・・・一覧表示。番号が付加されている。キャンセルも可能。
クリア・・・再確認後、全削除。短時間なのでキャンセル不可。
追加・・・続けてメモ名を音声入力。末尾に追加。キャンセルも可能。
削除・・・続けてメモ名を音声入力。該当するメモ名を削除。「n番目」で番号で削除(その代わりにn番目というメモが書けなくなる)。「メモ」で表示されているメモ名にタッチして削除。その後メモの空きを詰める。キャンセルも可能。音声による「キャンセル」「中止」を追加すると、キャンセルというメモが書けなくなる。

エンハンスコマンドとして「音声」と言うと音声で全メモを再生。「中止」または「キャンセル」、タッチで中止。
長い場合「一時停止」や「一時停止」後に1ページ毎に「次へ」「前へ」「一時停止解除」。一覧表示でも使用可能。
この辺までで「音声」「中止」「キャンセル」など3つ増えたコマンドや、
「一時停止」「次へ」「前へ」「一時停止解除」などもカスタマイズ可能。

「ヘルプ」も欲しくなるな。「音声ヘルプ」もか。

カテゴリー分け
「種類」「追加」「削除」「クリア」「(種類)」・・・「メモ」の代わりにメモをカテゴリー別にする「種類」をさらに追加。
「種類」の後に編集コマンド「追加」「削除」「クリア」がサブコマンド
幼稚園、小学校、スーパーなどと追加する。追加した種類自体がサブコマンドになる。
「種類」-「幼稚園」-「メモ」・・・幼稚園のメモが表示される
「種類」-「小学校」-「音声」・・・小学校のメモが音声再生される
「小学校」だけでも呼び出せる

起動直後に、「メモ」ならメモを表示、「種類」なら種類を表示、「小学校」なら小学校の「メモ」を表示、「音声」ならメモを音声再生する。

「ヘルプ」「音声ヘルプ」も起動直後に使用可能。

「メモ」「種類」「小学校」と発声後は「追加」「削除」「クリア」の編集コマンド、「種類」の後のみサブコマンドも追加使用可能。

起動直後に「メモ」を必須表示にするしないをカスタマイズ可能。

どんどん階層的になってくるが、階層は1段階だけ。「種類」も100まで。起動直後に最後に使用したサブコマンドを必須表示にするかしないかをカスタマイズ可能。

*****
全体の追加のデータ構造
*****

メモを追加した日時を保存して詳細オプションONで行末にそれも表示
保存日時でソート
指定日時で表示範囲限定

カテゴリー分けで保存日時、指定日時で表示可能

編集コマンド追加
「メモ」や「小学校」でメモ表示後 or「音声」でメモ発声直後、「編集」
「編集」と発声、続けて「醤油」と発声 or 「n番目」or タッチで「醤油」 を選択、修正文字列を「シャンプー」に口頭で修正 or タッチで手動で修正


by k1segawa | 2021-09-18 03:38 | BASIC | Comments(0)

by k1segawa