HSP 3.xで文字列を扱う命令&関数 Yahoo!ブックマーク に追加 はてなブックマーク に追加

無料プログラミングツール「HSP」(Hot Soup Processor)の文字列まわりの操作処理に関連した命令・関数を一気に 紹介します。HSPの想定バージョンは3.xです。

文字列操作処理関連の命令&関数など (HSP3)
getpath関数 ファイルパスからファイル名・フォルダ情報の文字列を切り出す
指定英文字列の小文字変換
getstr命令 特定の1バイト区切り(指定文字、改行、NULL文字)で文字列を切り出し代入する
instr関数 特定文字列を検索して位置を返す
int関数 文字列を整数値に変換
note〜命令・関数 テキストデータの入出力、行単位での文字列を扱えるメモリノートパッド機能
poke命令 指定位置に文字列を書き込み
sdim命令 文字列型変数・文字列型配列変数のバッファ確保 (デフォルト64バイト)
split命令 [HSP3.2] 特定の文字列区切りで文字列を切り出し、指定した各変数に代入する
str関数 整数値を文字列に変換
strf関数 指定表記(16進数、0埋めや空白スペースによる桁ぞろえ)で文字列を書式変換
strlen関数 文字列の長さをバイト単位で取得
strmid関数 指定位置から指定数の文字列を切り出す
strtrim関数 [HSP3.2] 文字列から指定文字を取り除く (左側・右側・両端・全体)
memcpy命令 指定位置から指定サイズでバッファをコピー
memexpand命令 中身を維持したままバッファサイズの拡張
+ (プラス、加算) 文字列の結合
' (アポストロフィー) 1バイト文字のASCIIコードを返す

文字列型変数の基礎

文字列型変数とは、「文字列を格納する入れ物」です。下のコードはそれぞれ同じ結果になります。 sdim命令は明示的にバッファサイズを指定して文字列型変数を確保できます。デフォルトサイズは64バイトで、 ときどき勘違いしてる人を見かけますが、仮にsdim命令で64バイト以下を指定したとしても、最小値の64バイトが 確保されます。

//	代入処理 (64バイト)
	buf = ""
//	明示的な確保
	adim buf, 64
//	明示的な確保 (64バイト)
	adim buf, 32
//	サイズ値を省略した明示的な確保 (64バイト)
	adim buf

変数の状態はスクリプトエディタのデバッグウィンドウの変数タブで確認 しましょう。チェックボックスの[メモリダンプ]を有効にすると、簡易的な16進数バイナリの状態をチェック でいます。型の名前は「str」(「string:文字列」のこと)になります。

文字列型配列変数の基礎

文字列型配列変数とは、「文字列を格納する入れ物で、その中に仕切りがあるもの」です。下のコードは それぞれ同じ結果になります。仕切りは「要素」という表現で、変数bufは要素番号0〜2が用意されることになります。 デフォルトサイズ(最小値)は64バイトで、変数aは「64バイト×3」のサイズが確保されます。

//	一括の代入処理
	buf = "", "", ""
//	個別の代入処理
	buf.0 = ""
	buf.1 = ""
	buf.2 = ""
//	明示的な確保
	adim buf, 64, 3
//	サイズ値を省略した明示的な確保
	adim buf, , 3

変数の状態はスクリプトエディタのデバッグウィンドウの変数タブで確認 しましょう。チェックボックスの[配列変数]を有効にすると、要素ごとの文字列をチェックできます。 [メモリダンプ]は要素番号0の簡易的な16進数バイナリの状態です。

サンプルコードの切れ端

文字列関連命令や関数を利用した雑多なサンプルソースコード(HSP3向け)をイロイロと書き出してみるみる。

//	1バイト文字とASCII値の相互変換

	mes '!'
	mes strf("%c", '!')
//	16進数と10進数の相互変換

	mes int("$" + "FF")
	mes strf("%#x", 255)
//	ASCIIコード表

	sdim buf

	i = $20
	repeat 12
		poke buf, , strf("0x%X |", i)
	
		ii = 6
		repeat $10, i
			poke buf, ii, strf("%3c", cnt)
			ii += 3
		loop

		mes buf

		i += $10
	loop
//	小文字変換

	data = "Hi. Welcome to HSP programming world!"
	mes getpath(data, 16)
//	文字数(バイト単位)の取得

	data = "Hi. Welcome to HSP programming world!"
	mes ""+strlen(data)+" Byte"
//	ファイルパス(URLアドレス)文字列の分解

	data = "http://lhsp.s206.xrea.com/hsp_string.html"
	mes getpath(data, 2)
	mes getpath(data, 8)
	mes getpath(data, 32)
//	指定文字の検索

	data = "Hi. Welcome to HSP programming world!"
	mes ""+(instr(data, 0, "HSP") + 1) + " 文字目"
//	指定範囲の文字列切り出し

	data = "Hi. Welcome to HSP programming world!"
	mes strmid(data, 15, 15)
//	文字列(1バイト文字)の反転

	data = "Hi. Welcome to HSP programming world!"
	len = strlen(data)

	sdim kekka, len + 1

	repeat len
		poke kekka, cnt, strmid(data, len - cnt - 1, 1)
	loop

	mes data
	mes kekka
//	指定文字列の出現カウント1

	data = "Hi. Welcome to HSP programming world!"

	i = 0
	repeat
		check = instr(data, i, "o")
		if check = -1 : count = cnt : break

		i += check + 1
	loop

	mes ""+count+" コ"
//	指定文字列の出現カウント2 [HSP 3.2〜]

	data = "Hi. Welcome to HSP programming world!"
	split data, "o"

	mes ""+(stat - 1)+" コ"
//	特定区切りで切り出して変数代入1

	sdim kekka, 64, 10

	data = "Hi. Welcome to HSP programming world!"

	i = 0
	repeat
		getstr kekka.cnt, data, i, ' '	; 1バイト文字のみ
		if strsize = 0 : count = cnt : break

		i += strsize
	loop

	repeat count
		mes kekka(cnt)
	loop
//	特定区切りで切り出して変数代入2 [HSP 3.2〜]

	sdim kekka, 64, 10

	data = "Hi. Welcome to HSP programming world!"
	split data, " ", kekka

	repeat stat
		mes kekka(cnt)
	loop
//	指定文字(1バイト)の除去 [HSP 3.2〜]

	data = "Hi. Welcome to HSP programming world!"
	mes strtrim(data, 3, ' ')

正規表現 処理

HSP自体は正規表現の機能をいっさいサポートしてません。

ただ、HSP3はCOMに対応してるので、IE5以降のVBScript(VBScript.RegExpオブジェクト)を呼ぶことで正規表現に よる文字列の検索や置換を行うことができます。パターンはPerlがベースになってます。付属サンプルの「sample\comobj\comtest8.hsp」(検索)と「sample\comobj\comtest9.hsp」(置換)に実例があります。(→ 参考、Google検索MSDN
 また、Tatsuo Babaさんが製作された汎用な正規表現ライブラリ「bregexp.dll」を利用する方法もあります。(→ 参考、Google検索

キーワード de HSP

HSPミニ講座

★ Yahoo!経由用ページ : ファイル | フォルダ | メニュー | マウス | ウィンドウ | オブジェクト | 文字列 | システム | 関数 | sendmsg命令 | その他 | サイトマップ | リンク