BHT-BASIC4.0:文字列を扱うユーザ定義関数について

文字列を扱うユーザ定義関数としてよくある感じのものを作成してみました。
関数定義 引数 戻り値
半角空白文字列生成
Function GfSpc$(byval pintCnt%)[128]
pintCnt%:文字数を指定 GfSpc$:空白文字列
右側半角空白削除
Function GfRTrim$(pstrValue$)[255]
pstrValue$:対象文字列 GfRTrim$:結果文字列
左側半角空白削除
Function GfLTrim$(pstrValue$)[255]
pstrValue$:対象文字列 GfRTrim$:結果文字列
前後の半角空白削除
Function GfTrim$(pstrValue$)[255]
pstrValue$:対象文字列 GfTrim$:結果文字列
文字列繰り返し
Function GfString$(pintSize%, pstrChr$)[255]
pstrChr$:対象文字
pintSize%:文字数(最大1~255)
GfString$:結果文字列

以下のソースが5個の関数を宣言しています。
エラー処理を各関数に入れましたが、必要ないかもしれません。 また、引数の文字列の長さチェックは行っていませんので、必要ならば追加して下さい。
  1. '---------------------------------------  
  2. '定数宣言:共通⇒(これは別ファイルにすべき)  
  3. '---------------------------------------  
  4.     Global GcTrue% : GcTrue% = -1  
  5.     Global GcFalse% : GcFalse% = 0  
  6.   
  7. '---------------------------------------  
  8. '半角空白文字列生成  
  9. '---------------------------------------  
  10. 'Function GfSpc$(byval pintCnt%)[128]  
  11. '引 数:  
  12. '   pintCnt%    :文字数を指定  
  13. '戻り値:  
  14. '   GfSpc$      :空白文字列  
  15. '---------------------------------------  
  16.     Function GfSpc$(byval pintCnt%)[128]  
  17.         Private strSpc$[128]: strSpc$ = ""  
  18.         Private i%  
  19.         If pintCnt% > 128 Then  
  20.             pintCnt% = 128  
  21.         Endif  
  22.         For i%=1 To pintCnt%  
  23.             strSpc$ = strSpc$ + " "  
  24.         Next  
  25.         GfSpc$ = strSpc$  
  26.     End Function  
  27.   
  28. '---------------------------------------  
  29. '右側半角空白削除(Rtrim)  
  30. '---------------------------------------  
  31. 'Function GfRTrim$(pstrValue$)[255]  
  32. '引 数:  
  33. '   pstrValue$  :対象文字列  
  34. '戻り値:  
  35. '   GfRTrim$    :結果文字列  
  36. '---------------------------------------  
  37.     Function GfRTrim$(pstrValue$)[255]  
  38.         'エラー処理宣言  
  39.         On Error Goto GfRTrim.ErrProc  
  40.   
  41.         Private intCnt%, intIdx%  
  42.         '最後尾から空白以外の文字を探す  
  43.         intCnt% = 0  
  44.         For intIdx% = Len(pstrValue$) To 1 Step -1  
  45.             If Mid$(pstrValue$, intIdx%, 1) <> " " Then  
  46.                 intCnt% = intIdx%  
  47.                 intIdx% = 1 'ループを止める  
  48.             Endif  
  49.         Next  
  50.         '右側全ての空白を排除  
  51.         GfRTrim$ = Left$(pstrValue$, intCnt%)  
  52. GfRTrim.Return  '関数戻り  
  53.         On Error Goto 0  
  54.         Exit Function  
  55. '-----  
  56. 'エラー処理  
  57. '-----  
  58. GfRTrim.ErrProc  
  59.         GfRTrim$ = ""  
  60.         Resume GfRTrim.Return  
  61.     End Function  
  62.   
  63. '---------------------------------------  
  64. '左側半角空白削除(Rtrim)  
  65. '---------------------------------------  
  66. 'Function GfLTrim$(pstrValue$)[255]  
  67. '引 数:  
  68. '   pstrValue$  :対象文字列  
  69. '戻り値:  
  70. '   GfLTrim$    :結果文字列  
  71. '---------------------------------------  
  72.     Function GfLTrim$(pstrValue$)[255]  
  73.         'エラー処理宣言  
  74.         On Error Goto GfLTrim.ErrProc  
  75.   
  76.         Private intCnt%  
  77.         strTemp$ = ""  
  78.         '--- 左端からスペースではない文字を探していく  
  79.         For intCnt% = 1 To Len(pstrValue$)  
  80.             If Mid$(pstrValue$, intCnt%, 1) <> " " Then  
  81.                 '空白では無い文字以降の文字列を戻す  
  82.                 GfLTrim$ = Mid$(pstrValue$, intCnt%)  
  83.                 intCnt% = Len(pstrValue$)  
  84.             End If  
  85.         Next intCnt%  
  86. GfLTrim.Return  '関数戻り  
  87.         On Error Goto 0  
  88.         Exit Function  
  89. '-----  
  90. 'エラー処理  
  91. '-----  
  92. GfLTrim.ErrProc  
  93.         GfLTrim$ = ""  
  94.         Resume GfLTrim.Return  
  95.     End Function  
  96.   
  97. '---------------------------------------  
  98. '前後の半角空白削除(Trim)  
  99. '---------------------------------------  
  100. 'Function GfTrim$(pstrValue$)[255]  
  101. '引 数:  
  102. '   pstrValue$  :対象文字列  
  103. '戻り値:  
  104. '   GfTrim$ :結果文字列  
  105. '---------------------------------------  
  106.     Function GfTrim$(pstrValue$)[255]  
  107.         Private strWK$[255]  
  108.         strWK$ = GfLTrim$(pstrValue$)   '左側空白削除  
  109.         GfTrim$ = GfRTrim$(strWK$)      '右側空白削除  
  110.     End Function  
  111.   
  112. '---------------------------------------  
  113. '文字列繰り返し  
  114. '---------------------------------------  
  115. 'Function GfString$(pintSize%, pstrChr$)[255]  
  116. '引 数:  
  117. '   pstrChr$    :対象文字  
  118. '   pintSize%   :文字数(最大1~255)  
  119. '戻り値:  
  120. '   GfString$   :結果文字列  
  121. '---------------------------------------  
  122.     Function GfString$(pstrChr$, pintSize%)[255]  
  123.         'エラー処理宣言  
  124.         On Error Goto GfString.ErrProc  
  125.   
  126.         Private intCnt%, strTemp$[255]  
  127.         strTemp$ = ""  
  128.         '文字数分の文字列連結  
  129.         For intCnt% = 1 To pintSize%  
  130.             strTemp$ = strTemp$ + pstrChr$  
  131.         Next intCnt%  
  132.         GfString$ = strTemp$  
  133. GfString.Return '関数戻り  
  134.         On Error Goto 0  
  135.         Exit Function  
  136. '-----  
  137. 'エラー処理  
  138. '-----  
  139. GfString.ErrProc  
  140.         GfString$ = ""  
  141.         Resume GfString.Return  
  142.     End Function  

これらの関数の実行ソースは以下の様になります。
  1.     Sub DispData(Byval strP1$, Byval strP2$)  
  2.         PRINT "[" + strP1$ + "]=>[" + strP2$ + "]"  
  3.     End Sub  
  4.   
  5. '-----  
  6. '実行はここから処理  
  7. '-----  
  8. Main  
  9. '   PRIVATE Num$, nRet%, intLoop%  
  10.     SCREEN 1                '漢字モード  
  11.     LOCATE , , 2            'カーソルをブロック表示  
  12.   
  13.     PRINT "***GfRTrim$"  
  14.     PRIVATE W$, W2$  
  15.     W$ = "1234  "  
  16.     W2$ = GfRTrim$(W$)  
  17.     CALL DispData(W$, W2$)  
  18.   
  19.     W$ = "12 34 "  
  20.     W2$ = GfRTrim$(W$)  
  21.     CALL DispData(W$, W2$)  
  22.   
  23.     W$ = "12 34 A"  
  24.     W2$ = GfRTrim$(W$)  
  25.     CALL DispData(W$, W2$)  
  26.   
  27.     PRINT "***GfLTrim$"  
  28.     W$ = "  1234"  
  29.     W2$ = GfLTrim$(W$)  
  30.     CALL DispData(W$, W2$)  
  31.   
  32.     W$ = " 12 34 "  
  33.     W2$ = GfLTrim$(W$)  
  34.     CALL DispData(W$, W2$)  
  35.   
  36.     W$ = " 1234 A"  
  37.     W2$ = GfLTrim$(W$)  
  38.     CALL DispData(W$, W2$)  
  39.   
  40.     PRINT "***GfTrim$"  
  41.     W$ = "  1234  "  
  42.     W2$ = GfTrim$(W$)  
  43.     CALL DispData(W$, W2$)  
  44.   
  45.     W$ = " 12 34  "  
  46.     W2$ = GfTrim$(W$)  
  47.     CALL DispData(W$, W2$)  
  48.   
  49.     PRINT "***GfString$"  
  50.     W$ = GfString$("@", 10)  
  51.     PRINT W$;  
  52.   
  53.     WAIT 0, &h01 'キー入力待ち  
  54.     END  
これを実行すると以下の様な表示になります。
101

楽天市場

【DENSO】ハンディターミナルBHT-1306BWB+USB通信ユニットCU-1321+ACアダプタAD2+標準バッテリBT-130L-C【送料無料・代引手数料無料】【02P05Nov16】

価格: 208,980円
(2016/11/26 22:01時点 )


■関連記事
BHT-BASIC:DENSOのハンディターミナルの開発言語のBHT-BASIC4.0を使ってみた
BHT-BASIC4.0:変数宣言の書き方(BHT-1300)
BHT-BASIC4.0:変数宣言の書き方その2(BHT-1300)
BHT-BASIC4.0:ユーザ定義関数について(BHT-1300)
BHT-BASIC4.0:演算子について(BHT-1300)
BHT-BASIC4.0:画面への表示について(BHT-1300)
BHT-BASIC4.0:キー入力について(BHT-1300)
BHT-BASIC4.0:数値用キー入力関数(ユーザ定義関数)について(BHT-1300)
BHT-BASIC4.0:ユーザ定義関数の値渡し・参照渡しについて(BHT-1300)
BHT-BASIC4.0:文字列を扱うユーザ定義関数についてその2
BHT-BASIC4.0:文字列を扱うユーザ定義関数についてその3
BHT-BASIC4.0:TeraTermを使ってDENSOのハンディターミナルにファイル(プログラム)転送を行う方法
BHT-BASIC4.0:I/OポートとWAIT、さらにTIMERについて(BHT-1300)
BHT-BASIC4.0:データファイルの取り扱いについて(BHT-1300)
BHT-BASIC4.0:データファイルの取り扱いについてその2(書込み・読込みの実用的な関数)
BHT-BASIC4.0:データファイルの検索について(SEARCH関数)
BHT-BASIC4.0:ユーザ関数の引数の仮変数に対する代入の注意点
BHT-BASIC4.0:データファイルの削除等について(KILL、CLFILEのラッパ関数)
BHT-BASIC4.0:ファイルの存在確認関数を作ってみました
BHT-BASIC4.0:拡張関数のバイナリサーチ処理関数(BSEARCH.FN3)の使い方
BHT-BASIC4.0:拡張関数のサーチ処理関数(SEARCH.FN3)の使い方
BHT-BASIC4.0:簡単なメニュー表示・選択を行うユーザ関数について
BHT-BASIC4.0:ファイル伝送におけるXFILE命令の使い方
BHT-BASIC4.0:バーコードの読込み(バーコードスキャン)について
BHT-BASIC4.0:Bluetoothデバイスアドレス取得等について
VB.NET:ハンディターミナル(BHT-1300等)とのデータファイルの送受信について

デル株式会社
コメント(0)