〜 テキスト 〜
文字列前後のスペースを除去

VisualBasicに、文字列前部、または、後部に付いたスペースを除去する関数があります。
今回のように、用意されてないものを使いたい場合に簡単に実現できるなら、自分で作ってしまいましょう。
尚、下記のサンプルモジュールは半角スペースのみを除去対象としています。
全角スペース等、他の文字も削除したい場合は、参考に作り変えてみてください。
また、連続するスペースの除去は、簡易化するために再帰で実現してますので、
HSP2では31重、HSP3では127重までしか対応していません。
それ以上は、ネストレベルエラーが発生してアベンドしてしまうので、内部でトラップを設けています。
スペースを除去した文字列はシステム変数refstrに代入されます。
HSP3は関数ですので、このシステム変数または、そのまま別命令のパラメータとして利用してください。
	

trim 対象文字列, タイプ
対象文字列スペース除去対象文字列、または文字列型型変数を指定する。
タイプ除去タイプ(0:両方 1:前部のみ 2:後部のみ)を指定する。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#module
#deffunc trim str, int
	mref string, 32 : mref type, 1
	mref rstr, 65
	s = string
	strlen len, s
	// 前部スペースの除去判定
	instr tmp, s, " "
	left = (type ! 2) && (tmp = 0)
	// 後部スペースの除去判定
	instr tmp, s, " ", len - 1
	right = len - ((type ! 1) && (tmp = 0)) - left
	// 除去して再帰
	strmid s, s, left, right
	if (len ! right) && (sublev < 30) : trim s, type : s = refstr
	rstr = s
	return
#global

	sdim hosoku, 16, 3
	data  = "   元 の デ ー タ   "
	hosoku = "両方共に削除", "前部のみ削除", "後部のみ削除"
	pos 10, 10 : mes "編集前文字列[" + data + "]"
	repeat 3
		trim data, cnt
		pos 10, cnt * 20 + 50 : mes hosoku.cnt + "[" + refstr + "]"
	loop
	stop

結果 = trim(対象文字列, タイプ)
結果スペースを除去した文字列の受取先を指定する。
対象文字列スペース除去対象文字列、または文字列型型変数を指定する。
タイプ除去タイプ(0:両方 1:前部のみ 2:後部のみ)を指定する。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
#module
#defcfunc trim str string, int type, local s, local len, local left, local right
	s = string
	len = strlen(s)
	// 前部スペースの除去判定
	left = (type ! 2) && (instr(s, , " ") = 0)
	// 後部スペースの除去判定
	right = len - ((type ! 1) && (instr(s, len - 1, " ") = 0)) - left
	// 除去して再帰
	s = strmid(s, left, right)
	if (len ! right) && (sublev < 123) : s = trim(s, type)
	return s
#global

	data  = "   元 の デ ー タ   "
	hosoku = "両方共に削除", "前部のみ削除", "後部のみ削除"
	pos 10, 10 : mes "編集前文字列[" + data + "]"
	foreach hosoku
		pos 10, cnt * 20 + 50 : mes hosoku.cnt + "[" + trim(data, cnt) + "]"
	loop