chop, chomp
id:eiji8pou:20050601:1117593390 の続き。と言うか焼き直し
numalias chop_str numalias chop_len numalias chop_chop ------ ------ ;============================== ; chop ;============================== ;機能:文字列の最後の文字を削除する。 ;引数:削除したい文字列の入った文字変数 ;結果:引数に与えられた文字列が一文字少なくなる。全角文字は考慮しない。 ;付記:切り落とされた文字は、chopの直後であれば、chop_pick命令で取得できる。 *chop getparam s%chop_str ; 対象の文字列を取得。 mov $chop_chop,"" ; 変数の初期化 len %chop_len,$%chop_str ; 対象の文字列の長さを確定 if %chop_len < 1 return ; もし、対象の文字列が空なら、何もせずに終わる。 dec %chop_len ; 長さを減らす。 mid $chop_chop,$%chop_str,%chop_len,1 ; 切り落とされる文字を取得 mid $%chop_str,$%chop_str,0,%chop_len ; 実際に切り落とす return ;============================== ; chop2 ;============================== ;機能:文字列の最後を二文字削除する。 ;引数:削除したい文字列の入った文字変数 ;結果:引数に与えられた文字列が二文字(全角文字なら一字)少なくなる。 ;付記:切り落とされた文字は、chop2の直後であれば、chop_pick命令で取得できる。 *chop2 getparam s%chop_str ; 対象の文字列を取得。 mov $chop_chop,"" ; 変数の初期化 len %chop_len,$%chop_str ; 対象の文字列の長さを確定 if %chop_len < 2 return ; もし、対象の文字列が空なら、何もせずに終わる。 sub %chop_len,2 ; 長さを減らす。 mid $chop_chop,$%chop_str,%chop_len,2 ; 切り落とされる文字を取得 mid $%chop_str,$%chop_str,0,%chop_len ; 実際に切り落とす return ;============================== ; chop_pick ;============================== ;機能:chop, chop2等で切り落とされた文字を取得する。 ;引数:取得した文字列を入れる文字変数 ;結果:引数に与えた文字変数に格納される。 ;付記:直前に実行した、chopないしchop2に影響される。 *chop_pick getparam s%chop_str ; 格納する文字変数の番号を取得。 mov $%chop_str,$chop_chop return ;============================== ; chomp ;============================== ;機能:末尾が特定の文字列の時以外にchopする。 ;引数:削除したい文字列の入った文字変数と、切り落とさない文字列 ;結果: ;付記:2バイト文字を対象とする場合は、chomp2を使うこと。 ;付記:また、内部的にchopを使うので、chop_pickも有効になる。 *chomp getparam s%chop_str,$chop_str ; 対象文字列番号と、特定文字列を取得。 if $chop_str = "" return ; 特定文字列が空だったら、何もせずに戻る。 mid $chop_str,$chop_str,0,1 ; 特定文字列の先頭だけが有効。 chop $%chop_str chop_pick $chop_len if $chop_len = $chop_str add $%chop_str,$chop_len return ;============================== ; chomp2 ;============================== ;機能:末尾が特定の文字列の時以外にchop2する。 ;引数:削除したい文字列の入った文字変数と、切り落とさない文字列 ;結果: ;付記:また、内部的にchop2を使うので、chop_pickも有効になる。 *chomp getparam s%chop_str,$chop_str ; 対象文字列番号と、特定文字列を取得。 len %chop_len,$chop_str if %chop_len < 1 return ; 特定文字列が空か無効だったら、何もせずに戻る。 mid $chop_str,$chop_str,0,2 ; 特定文字列の先頭だけが有効。 chop2 $%chop_str if $chop_chop = $chop_str add $%chop_str,$chop_chop return