Last Update : 2008/04/xx
文字列から指定文字を取り除いた結果を返す関数です。HSP 3.2からサポートしています。関数名の由来は、「string trim」(goo辞書)から。
strtrim(元のバッファ, モード, 取り除く文字)
第1パラメータには文字を取り除く対象となる文字列型変数を指定します。第2パラメータはモードです。4つのモードが用意されており、モードごとに赤の部分が除去の対象となります。
p2の取り出しモード | ||
- | 元の文字列 | AAsampleAAAAsampleAAA |
0 | 両端から取り除く (デフォルト) | AAsampleAAAAsampleAAA |
1 | 左端側から取り除く | AAsampleAAAAsampleAAA |
2 | 右端側から取り除く | AAsampleAAAAsampleAAA |
3 | 全体から取り除く | AAsampleAAAAsampleAAA |
第3パラメータは取り除く文字です。取り除ける文字(文字コード)として指定できるのは半角1バイト文字か、全角2バイト文字になります。アルファベットの大文字・小文字は区別されます。指定しない場合は、半角スペース(0x20)が除去の対象となります。
全角1バイトは文字を半角の「’」(アポストロフィー)でくくることで文字コードへと変換できます。ひらがなや漢字など全角2バイトはwpeek関数で文字コードを取得できます。
// 半角文字 mes "A:"+'A'+" 〜 Z:"+'Z' mes "a:"+'a'+" 〜 z:"+'z'
// 全角文字 buf = "1", "A", "あ", "ア", "字", " " foreach buf mes "["+buf.cnt+"] "+wpeek(buf.cnt) loop
半角スペース、1バイト文字、2バイト文字を取り除くサンプルです。
// 半角スペース [HSP 3.2〜] buf = " あいうえお! !HSP " mes "["+buf+"]" mes "["+strtrim(buf, 0)+"]" mes "["+strtrim(buf, 1)+"]" mes "["+strtrim(buf, 2)+"]" mes "["+strtrim(buf, 3)+"]"
// TABスペース [HSP 3.2〜] buf = "AAA あいA うえお AAA BBB A" mes "["+buf+"]" mes "["+strtrim(buf, 3, '\t')+"]"
// 1バイト文字 [HSP 3.2〜] buf = "AAAあいAうえお AAA BBB A" mes "["+buf+"]" mes "["+strtrim(buf, 0, 'A')+"]" mes "["+strtrim(buf, 1, 'A')+"]" mes "["+strtrim(buf, 2, 'A')+"]" mes "["+strtrim(buf, 3, 'A')+"]"
// 2バイト文字 [HSP 3.2〜] buf = "あああHSPあHSPああ" moji = "あ" value = wpeek(moji) mes "["+buf+"]" mes "["+strtrim(buf, 0, value)+"]" mes "["+strtrim(buf, 1, value)+"]" mes "["+strtrim(buf, 2, value)+"]" mes "["+strtrim(buf, 3, value)+"]"
複数の文字を取り除きたいなら、strtrim関数を複数回実行します。
// 複数の文字を取り除く [HSP 3.2〜] buf = "AAAXXsample XXXAsampleXXAA" mes buf value = 'A', 'X' ; 取り除く文字 foreach value buf = strtrim(buf, 3, value.cnt) loop mes buf
改行コード「CR(0x0D)+LF(0x0A)」は2回に分けて行う必要があります。
// 改行を取り除く [HSP 3.2〜] buf = "HSP XXX\nAAA\nXXXX\nあいうえお\nsample" mes buf value = $0D, $0A repeat 2 buf = strtrim(buf, 3, value.cnt) loop mes buf
HSPで作成した実行ファイルのアイコンにテキストファイルをドラッグ&ドロップした時、そのテキストデータを表示するサンプルです。Windows NT系OSの場合はファイルパス内に半角スペースが含まれていると、文字列の前後が「"」でくくられる仕様があります。その対処用にstrtrim関数を利用してます。(HSP 3.2以前の場合の対処方法)
// コマンドライン文字列の対処 [HSP 3.2〜] if dir_cmdline = "" { dialog "コマンドラインパスがないので終了" end } title ""+dir_cmdline sdim filepath, 256 filepath = dir_cmdline ; テキストファイルの読み込み notesel buf noteload strtrim(filepath, , '"'), 500 mes buf