ここから本文です

この知恵ノートを「知恵コレクション」に追加しました。

追加した知恵ノートはMy知恵袋の「知恵コレクション」ページで確認できます。

知恵コレクション」に登録済みです。

再登録しました。

追加に失敗しました。

ノートに戻り、もう一度やり直してください。

すでに1,000件のノートが登録されています。

新しく追加したい場合は、My知恵袋の「知恵コレクション」ページで登録されているノートを削除してください。

追加できませんでした。

ノートは削除されました。

AndroidでBASICで遊ぶ方法 その2

ライターさん(最終更新日時:2015/1/8)投稿日:

  • ナイス!:

    0

  • 閲覧数:1496

印刷用のページを表示する

0.この知恵ノートの概要

 

  Androidでプログラム言語BASICを利用してプログラムを
  作成できるアプリ「BASIC!」で実際に作成したプログラムを
  ご紹介し、説明します。
  ちょっとマニアックですがご紹介します。

 

  ※今回の説明内容と直接関係はありませんが実際に
   BASICが動いている動画を見たい方は以下をご覧ください。

   AndroidでBASICで遊ぶ方法(動画編)
   http://note.chiebukuro.yahoo.co.jp/detail/n326969

 

1.前提

 

  この知恵ノートをお読みになる前に以下の知恵ノートを
  ご覧いただければよりわかりやすいと思います。

  AndroidでBASICで遊ぶ方法
  http://note.chiebukuro.yahoo.co.jp/detail/n190833

  また、この知恵ノートを理解するには、BASIC!の知識以外に
  HTML/CGIの知識が必要です。

  HTML/CGIが判らない方は、この知恵ノートは参考になりません
  のでご注意ください。

 

2.ご紹介するプログラム

 

  プログラムの名前は置換ツールといいます。
  私が実際にタブレットで動かして利用しているしょぼいツールです。

 

     置換ツール イメージ

 

3.「置換ツール」でできること

 

  置換ツールを動かしてできることはとてもシンプルです。

 

  (1)クリップボードから文字列をコピーしてきて画面上の
     クリップボードからコピーしてきた内容欄に表示。

 

  (2)画面の置換前文字列と置換後文字列に何か文字を入力
     して送信ボタンを押すとクリップボードからコピーして
     きた内容欄の置換前文字列が置換後文字列に置き換わる。

 

  (3)置換後のクリップボードからコピーしてきた内容欄は
     保存するファイル名で指定したファイルに保存される。

 

  (4)「終了ボタン」を押すと終了する。

  例えば、メールで引用したときに「>>」みたいなマークが
  つく場合がありますが置換前文字列に「>>」、置換後文字列に
  何も指定しないで送信ボタンを押せば、「>>」が無い状態に
  クリップボードからコピーしてきた内容欄の文字列が更新されます。

  以下に、送信ボタンを押す前の画面の状態と後の状態の画像を
  載せておきます。

    前の状態: https://www.dropbox.com/s/ituqyqt1duqi98h/inhtml.jpg
  後の状態: https://www.dropbox.com/s/eq0bn0dk4cxv6jj/outhtml.jpg

 

4.「置換ツール」で利用している仕組み

 

  このツールのプログラムは、BASIC!で作られていますが、HTML命令
  と呼ばれる特殊な命令で画面制御を実施しています。

 

  HTML命令は、具体的にはBASIC!の画面にホームページ作成時に
  利用されるHTMLで書いた内容がそのまま表示てきる命令です。

 

  HTMLなので当然、画面には送信ボタンやハイパーリンクなどが
  ありますが、実際に送信やクリックなどをするとその情報が
  BASIC!のプログラムに通知されます。

 

  BASIC!のプログラムでは、通知された内容によって自由にその後の
  処理内容を変えることができます。

 

  BASIC!のプログラムで処理を実施した後に出力用のHTMLを作成
  して結果画面を表示しています。

 

5.「置換ツール」のプログラム内容

 

  それではもう少し具体的にこのツールの内容を見ていきます。
  BASIC!のプログラムで実際にやっていることを順に記載すると
  以下の通りとなります。

 

  実際のブログラムのソースとテンプレートHTMLファイルは以下を
  ご覧ください。

 

  ブログラムのソース: https://www.dropbox.com/s/ubnvhkia72jzxwe/basicsource.txt
  テンプレートHTMLファイル: https://www.dropbox.com/s/759dwfdcav78yrv/motohtml.txt  
  
  (1)HTML命令を利用するため特殊命令実行

 

     HTML.OPEN

 

  (2)クリップボードから文字列をコピーして変数にセット

 

     clipboard.get cl$ ←cl$にクリップボードからセット

 

  (3)入力画面表示の為のテンプレート用HTMLファイル読込

  (4)読み込んだテンプレートHTMLファイルの一部変換

     ※テンプレートHTMLファイルは、初期画面と結果画面で
      共用しているので一部変換が必要になります。

  (5)一部変換したテンプレートHTMLファイルの一時ファイルへの
     書き出し

 

     Text.open r, file_number,"tki.html" ←tki.html:テンプレHTMLオープン
     all$=""
     all2$=""
     while line$ <> "EOF" ←テンプレHTMLの行がEOFで無い限り繰り返し
     Text.readln file_number, line$ ←テンプレHTML 一行読み込み
       if line$ <> "EOF" then
         line2$=replace$(line$,"@@1","") ←テンプレHTMLの一部変換(開始)
         line3$=replace$(line2$,"@@2","") 
         line4$=replace$(line3$,"@@3","temp.txt")
         line5$=replace$(line4$,"@@4",cl$) ←テンプレHTMLの一部変換(終了)
         all$=all$+line5$+"\n" ←テンプレHTMLの一部変換後をall$に蓄積
         all2$=all2$+line$+"\n" ←テンプレHTMLの一部変換前をall2$に蓄積
       else
       endif
     repeat ←ここまで繰り返し
     Text.close file_number ←tki.html:テンプレHTMLクローズ
     Text.open w, fl_number,"tkt1.html" ←一時ファイルオープン
     Text.writeln fl_number,all$ ←all$(一部変換済)を一時ファイルに書き出し 
     Text.close fl_number ←←一時ファイルクローズ

 

  (6)一時ファイルを画面にHTMLとして表示する。

 

     hajime: ←後々、gotoで戻る為のラベル

     HTML.LOAD.URL "tkt1.html" ←tkt1.htmlを画面にHTMLとして表示
     
  (7)表示したHTML画面でなにかアクションがあるまでプログラムは待つ

 

     xnextUserAction: ←後々、gotoで戻る為のラベル

     ! loop until data$ is not ""

     DO
      HTML.GET.DATALINK data$  ←HTML画面で何かアクションがあると
                    内容がdata$に格納される。
     UNTIL data$ <> "" ←data$が空の間は繰り返す。

 

  (8)HTML画面でのアクション内容と通知データを分離する。

 

     type$ = LEFT$(data$, 4) ←data$の頭4文字はアクション内容

     data$ = MID$(data$,5) ←data$の5文字目以降は、通知データ

 

  (9)アクション内容で処理を分ける

 

     ! Act on the data type
     ! Shown are all the current data types

     SW.BEGIN type$ ←type$の内容で処理を分ける

 

  (10)バックボタンを押された場合は、処理を終了する。

 

      ! Back Key hit.
      ! if we can go back then do it
      SW.CASE "BAK:" ←BAK:はバックキーを押された場合の固定文字列
       PRINT "BACK key: " + data$ ←コンソールに印刷
       END ←プログラムを終了
       SW.BREAK ←SW.ENDに移動

  (11)ハイパーリンクまたは、formの送信ボタンを押された場合は、
      HTML画面を表示させる。

 

      注)formの送信ボタンの場合は、URLデコードをしたい為。

 

      ! A hyperlink was clicked on
      SW.CASE "LNK:" ←LNK:はハイパーリンクまたは、formの送信ボタン
               を押された場合の固定文字列
       PRINT "Hyperlink selected: "+ data$
       HTML.LOAD.URL data$  ←LNK:はハイパーリンクの時は、通知データの
                   の内容をHTMLとして表示
                   formの送信ボタンの場合、HTMLとして表示する
                   通知データではないのだがURLデコードする必要が
                   あるので一瞬白い画面を表示させる形になる。
                  
       SW.BREAK

 

  (12)なんらかのエラー場合は、メッセージを表示。

 

      注)本来は実行中止すべきなのかも

 

      ! An error occured
      SW.CASE "ERR:" ←このアクションが実際に発生したことがないので詳細不明
       PRINT "Error: " + data$
       SW.BREAK

 

  (13)終了ボタンを押された場合は、処理を終了する。

 

      注)アクション内容がDAT:の場合は、HTML側でjavascript:doDataLinkが
        実行されており、その引数がデータ内容として受け渡される。

 

      ! User data returned
      SW.CASE "DAT:" ←DAT:はdoDataLinkが実行された場合の固定文字列
       PRINT "User data: " + data$
 
       ! Check for Exit
       IF data$ = "Exit" ←doDataLinkの引数がExitならば
        PRINT "User ended demo."
        HTML.CLOSE ←HTML命令 利用終了の特殊命令
        popup "置換ツールを終了します。",0,0,1 ←バブルメッセージを画面に4秒表示
        pause 4000 ←4秒WAIT
        exit
       ENDIF
       SW.BREAK


  (14)formの送信ボタンを押された場合は、置換処理をして出力用HTML画面を表示。

 

      注)formの送信ボタンを押された場合は、まず、(11)のLNK:で処理されて
        URLデコードされたあとにFOR:のデータが来る。


      ! Form data returned.
      ! Note: Form data returning
      ! always exits the html.

      SW.CASE "FOR:" ←FOR:はURLデコードが実行された場合の固定文字列
       PRINT "Form data: "+data$ ←data$の内容はデコード済みなので日本語も
                     そのままGET形式で入っている。
       split aaa$[],data$,"&" ←GET形式なので&で分割
       array.length laaa,aaa$[] 
       i=2 ←置換前文字列の処理部分
         sss$=str$(i)
         split bbb$[],aaa$[i],"=" ←GET形式なので=で分割
         array.length lbbb,bbb$[]
         if lbbb=2 then
           print "line: ";sss$;" : " ;aaa$[i]
           print "line: ";sss$;" : " ;bbb$[2]
           bbba$=bbb$[2] ←置換前文字列をbbba$に格納
         else ←置換前文字列が空の場合
           array.delete bbb$[] ←配列を再利用する為、削除
           array.delete aaa$[] ←配列を再利用する為、削除
           popup "エラー:置換元文字列が空です。",0,0,1
           goto hajime
         endif
         array.delete bbb$[]
       i=3 ←置換後文字列の処理部分
         sss$=str$(i)
         split bbb$[],aaa$[i],"="
         array.length lbbb,bbb$[]
         if lbbb=2 then
           print "line: ";sss$;" : " ;aaa$[i]
           print "line: ";sss$;" : " ;bbb$[2]
           bbbb$=bbb$[2]
         else ←置換後文字列が空の場合
           bbbb$="" ←置換後は空でもエラーせずに空文字列で置換する。
         endif
         array.delete bbb$[]
       i=4 ←保存ファイルの処理部分
         sss$=str$(i)
         split bbb$[],aaa$[i],"="
         array.length lbbb,bbb$[]
         if lbbb=2 then
           print "line: ";sss$;" : " ;aaa$[i]
           print "line: ";sss$;" : " ;bbb$[2]
           bbbc$=bbb$[2]
         else
           popup "保存ファイル名が空です。temp.txtを設定します。",0,0,1
           bbbc$="temp.txt" ←保存ファイルは空でもエラーせずにtemp.txtに保存する。
         endif
         array.delete bbb$[]
       i=5 ←クリップボートからコピーした内容の処理部分
         sss$=str$(i)
         split bbb$[],aaa$[i],"="
         array.length lbbb,bbb$[]
         if lbbb=2 then
           print "line: ";sss$;" : " ;aaa$[i]
           print "line: ";sss$;" : " ;bbb$[2]
           bbbd$=bbb$[2]
         else ←クリップボートからコピーした内容が空の場合
           array.delete bbb$[]
           array.delete aaa$[]
           popup "エラー:内容が空です。",0,0,1
           goto hajime
         endif
         array.delete bbb$[]

       print "bbbd:";bbbd$
       print "bbba:";bbba$
       print "bbbb:";bbbb$
       nai$=replace$(bbbd$,bbba$,bbbb$) ←クリップボートからコピーした内容
                        を置換。
       out$=all2$ ←テンプレHTMLの一部変換前を出力用変数にセット
       out$=replace$(out$,"@@1",bbba$) ←出力用変数の置換前文字列を置換
       out$=replace$(out$,"@@2",bbbb$) ←出力用変数の置換後文字列を置換
       out$=replace$(out$,"@@3",bbbc$) ←出力用変数の保存ファイル名を置換
       out$=replace$(out$,"@@4",nai$) ←出力用変数のクリップボートからコピーした内容を置換 
       print "out:";out$
       Text.open w, fl3_number,"tkt1.html" ←結果画面表示用HTMLオープン
       Text.writeln fl3_number,out$ ←出力用変数を結果画面表示用HTMLへ書き出し
       Text.close fl3_number  ←結果画面表示用HTMLクローズ
       HTML.LOAD.URL "tkt1.html" ←結果画面表示用HTMLをHTML画面として表示
       clipboard.put nai$ ←クリップボートからコピーした内容(置換済)をクリップボードへセット
       Text.open w, fl4_number,bbbc$ ←保存ファイルをオープン
       Text.writeln fl4_number,nai$ ←クリップボートからコピーした内容(置換済)を
                      保存ファイルに書き出し。
       Text.close fl4_number ←保存ファイルをクローズ
       array.delete aaa$[]
       popup "置換完了しました。",0,0,1
       goto xnextUserAction

       END
       SW.BREAK

 

      SW.DEFAULT ←その他のアクション内容がきた場合終了
       PRINT "Unexpected data type:", type$ + data$
       END

     SW.END

     GOTO xnextUserAction

 

6.テンプレートHTMLファイルの内容

 

  テンプレートHTMLファイルについてはポイントのみ説明します。

 

   テンプレート画像

 

  (1)終了ボタンの為にjavascriptが用意されている。

 

     注)おそらく、doDataLinkという関数名でないとBASIC!にデータ受け渡しできない。

 

     ◆javascript

     <script type="text/javascript">
         function doDataLink(data) {
             Android.dataLink(data);
         }
     </script>

 

     ◆終了ボタン

     <input type="button" value=" 終 了 " onClick="doDataLink('Exit')" />

 

  (2)フォームのアクションはget

 

     注)postだとエラーになります。        

 

     <form id='main' method='get' action='FORM'>

 

  (3)プログラムで置換しやすいように各項目には初期値をセット

 

     置換前文字列<input type="text" name="mae" size="30" value="@@1">
         
以上です。


  
6.BASIC!の情報サイト


 

  私自身もBASIC!関連の日本語の掲示板や情報サイトを探しましたが
  ほとんどないので、仕方なく自分で作成しました。

  私自身、そんなにプログラム能力はないのであまり大した内容は
  ありませんが紹介動画や自作サンプルプログラムを置いているので
  よろしければ覗いてみてください。

 

  BASIC!友の会

   http://basic.amsstudio.jp/
      

  また、BASIC!友の会関連の更新はツイッターで
  お知らせしています。


  BASIC!友の会のツイッターアカウント
  @basictomonokai

  https://twitter.com/basictomonokai


7.関連知恵ノート一覧

 

  この知恵ノートに関連する知恵ノートの一覧です。

 

    AndroidでBASICで遊ぶ方法
  http://note.chiebukuro.yahoo.co.jp/detail/n190833

  AndroidでBASICで遊ぶ方法 その2
  http://note.chiebukuro.yahoo.co.jp/detail/n208888

  AndroidでBASICで遊ぶ方法 その3
  http://note.chiebukuro.yahoo.co.jp/detail/n210000

  AndroidでBASICで遊ぶ方法 その4
  http://note.chiebukuro.yahoo.co.jp/detail/n214126

  AndroidでBASICで遊ぶ方法 その5
    http://note.chiebukuro.yahoo.co.jp/detail/n216786
  AndroidでBASICで遊ぶ方法 その6
    http://note.chiebukuro.yahoo.co.jp/detail/n218610

  AndroidでBASICで遊ぶ方法 その7

  http://note.chiebukuro.yahoo.co.jp/detail/n222440

    AndroidでBASICで遊ぶ方法 その8-1
    http://note.chiebukuro.yahoo.co.jp/detail/n224842

    AndroidでBASICで遊ぶ方法 その8-2
    http://note.chiebukuro.yahoo.co.jp/detail/n225769

    AndroidでBASICで遊ぶ方法 その8-3
    http://note.chiebukuro.yahoo.co.jp/detail/n225771
    AndroidでBASICで遊ぶ方法(超初心者編)
  http://note.chiebukuro.yahoo.co.jp/detail/n223881


 

 

このノートのライターが設定した関連知恵ノート

このノートに関するQ&A

このノートに関するQ&Aは、まだありません。

このノートについて質問する

このノートについてライターの方に質問できます。

※ライターの方から必ず回答をいただけるとは限りません

※別ウィンドウで開きます

ピックアップ

【iPhone】修理交換の申込方法...
 ※追記※2015/1/30現在iPhone6及び6+が発売されたのを受け、情...
お尻や足の贅肉にさよなら、「...
本にできない「正しい」下半身ダイエットなぜ「本にできない...
Android向けアプリ Yahoo!ブラ...
基本的な使い方(メニュー・操作)便利な使い方オススメの使...
本文はここまでです このページの先頭へ