本文へジャンプ

 MIFES マクロ
 マクロコマンド書式 制御構造 式について 演算 変数 定数 システム変数 システム関数 機能番号一覧 仮想キー番号一覧
 サンプル1 サンプル2
   

 特定文字列検索と挿入

 "if" 文字列を見つけてすぐ後ろにスペースを挿入してくマクロ
 ・"if" "(" ")" の スペースチェック&スペース挿入マクロ

 



・"if" 文字列を見つけてすぐ後ろにスペースを挿入してくマクロ


  ifの後ろにスペースが入っているかのチェック処理

下記は "if"という文字列の後にスペースが入っているかをチェックする
マクロです。まず@byteにはファイル先頭からという意味で先頭の番号1を設定します。次にwhile分で文字を読み取っていく処理を「while」にてループ記述を書きます。whileは下手すると無限ループになってしまいMIFESがなにも受け付けなくなるので要注意です。今回は@limitという変数を設けて無限にならないように処理をいれています。
文字列の検索はsearch関数を使い特定の文字列を見つけることができます。特定の文字列が見つかると、search関数の返り値で見つかった文字数 (取得できた文字数) を受け取ります。ここでは文字数が0以下であった場合(みつからなかったと判定)はbreakで終了します。

"if"という文字列が見つかったらすぐ後ろの文字を見に行ってそのコードが' '(スペース)でなかった場合はinsstr()を使ってスペースを挿入しています。

    ファイル if_space_chk.mcr


*if_space_chk スペースチェック

  @byte = 1 ;先頭から

  while(@code != 0xffff)
    @5 = search(0, 0, "if") ; 
    if(@5 <= 0)          ;検索できたかどうか
     break
    else
     @byte += 2;
     if( @code != ' ' )
       insstr("\s")
     endif
    endif
    if(@code == 0xffff)
     break;
    endif
    if(@limit >= 10000)
     break;
    endif
    @limit +=1
  wend
exit()    ;マクロの終了




「if」「(」「)」の スペースチェック

"if"という文字列と"(" ")"という文字列の前後にスペースが入っているかチェックしてスペースがなければスペースを挿入するマクロです。
  ・if の後のスペースをチェック
  ・( の後のスペースをチェック
  ・) の後のスペースをチェック
スペースがなければスペースを挿入

  ファイル if_sp_chk.mcr


*aaspace_chk スペースチェック

   @byte = 1 ;先頭から
   while(@code != 0xffff)
      @5 = search(0, 0, "if") ;
      if(@5 <= 0) ;検索できたかどうか
         break
      else
         @byte += 2;
         if( @code != ' ' )
            insstr("\s")
         endif
      endif
      if(@code == 0xffff)
         break;
      endif
      if(@limit >= 10000)
         break;
      endif
      @limit +=1
   wend
   @byte = 1 ; ファイル先頭から
   while(@code != 0xffff)
      @5 = search(0, 0, "(") ;
      if(@5 <= 0) ;検索できたかどうか
         break
      else
         @byte += 1 ;
         if( @code != ' ' )
            insstr("\s")
         endif
      endif
      if(@code == 0xffff)
         break;
      endif
      if(@limit >= 10000)
         break;
      endif
      @limit +=1
   wend
   @byte = 1 ; ファイル先頭から
   while(@code != 0xffff)
      @5 = search(0, 0, ")") ;
      if(@5 <= 0) ;検索できたかどうか
         break
      else
         if( @code != ' ' )
            insstr("\s")
         endif
         @byte += 1 ;
      endif
      if(@code == 0xffff)
         break;
      endif
      if(@limit >= 10000)
         break;
      endif
      @limit +=1
   wend
   exit() ;マクロの終了








リンク


 



お知らせ
  • お知らせが入ります。
  • お知らせが入ります。
  • お知らせが入ります。