Hot Soup Processor スクリプト言語システム
HSP . 文字処理


PSH x HSP 講座 オブジェクト COM MCI 用語 ソフト HTMLタグ リンク

フリーウェアのスクリプト言語システムHSPを利用したプログラミング講座です。ONION softさんが開発したものです。HSPは無料ソフトですよー。

peek

peek(p1,p2) [バッファから1byte読み出し]
p1 内容を読み出す元の変数名
p2 バッファのインデックス(Byte単位)
変数に保存されたデータメモリ上の任意の場所にある1バイト(8bit)の内容を数値として返します。
関数の戻り値は、0〜255までの整数値になります。

1バイト分のデータを取り出す関数です。キャラクターコードを表示します。詳しい情報としてHSPリファレンスから「文字列の秘密」のマニュアルも読むといいです。

a="test";元々の文字
data=peek(a,0) ;インデックス番号0の文字

mes "文字列 ["+a+"] / キャラクターコード ["+data+"]"

strmid

strmid(p1,p2,p3) [文字列の一部を取り出す]
p1 取り出す元の文字悦が格納されてる変数名
p2 取り出し始めのインデックス
p3 取り出す文字数
p1で指定した文字列型変数の中から、 p2,p3で指定した条件で文字を取り出したものを返します。
p2で取り出し始めるインデックスを指定します。これは、文字列の始まり1文字目を0として、1,2,3・・・と順番に増えていくものです。1から始まりではないので注意してください。
p3で取り出す文字数を指定します。実際に格納されている文字数よりも多く指定した場合は、実際の文字数までが取り出されます。
また、p2に-1を指定すると文字列の右からp3で指定した文字数だけ取り出します。

文字列を切り出す関数です。このサンプル例は文字の前後から指定文字数を取り出しします。インデックスが0からなのでそこを注意してください。

a="ABCDEFG" ;元々の文字列

sdim data,64

data=strmid(a,0,5) ;左から5文字分取り出す
mes "左から5文字分 ["+data+"]"

data=strmid(a,-1,3) ;右から3文字分取り出すm
es "右から3文字分 ["+data+"]"

data=strmid(a,2,4) ;3文字目から5文字目を取り出す
mes "3〜5文字目 ["+data+"]"

getstr

getstr p1,p2,p3,p4,p5 [バッファから文字列読み出し]
p1 内容を読み出す先の変数名
p2 バッファを割り当てた変数名
p3 バッファのインデックス(Byte単位)
p4 区切りキャラクタのASCIIコード
p5 読み出しを行う最大文字数
メモリ上のバッファの任意の場所にある内容を文字列として変数に読み出します。文字列は、00というコードか、改行コード(\n)があるまで読み出されます。改行コードは文字列には含まれません。
また、区切りキャラクタコードを指定することができ任意の文字で区切られた文字列を取り出すこともできます。
この命令で読み出されたByte数は自動的に strsizeというシステム変数に代入されます。strsizeは、次のインデックスまでの移動量を得る時に使用します。

たとえば、変数bのバッファに

'A' 'B' 'C' ',' 'D' 'E' 'F' 00(終了コード)

というデータが入っている場合、

getstr a,b,0,','

を実行すると、変数aの内容は、'A' 'B' 'C' の部分が読み出されて"ABC"という文字列になり、strsize は4になります。

p5パラメーターにより、読み出しを行なう最大文字数(byte数)を指定することができます。p5パラメーターが省略された場合には、1024文字(byte)までの読み出しを行ないます。(p1で指定された変数のバッファは自動的に確保されるので、sdim命令等でバッファの設定を行なっておく必要はありません。)

この命令は、複数行を含むテキスト文字列データや、特定の文字で区切られたデータを効率よく切り出すためのものです。複数行を含むテキストを扱うためには、他にもメモリノートパッド命令セットがあります。また、文字列から特定数の文字を取り出すためには、strmid命令が用意されています。

特定の区切りで文字を切り出す命令です。このサンプル例はコンマで区切された数字を1つづつ取り出します。

a="10,20,45,80,100,230,1000,-1" ;元々の文字列

sdim data,100

repeat
getstr data,a,cunt,',' ;文字列を取り出してdataに代入
if strsize=0:break ; 取り出した文字列がない場合はループからぬける

mes data
cunt+=strsize ; 次のインデックスに移動
loop

mes "終わり"

 区切り文字を指定なしにすると改行(\n)の処理までになります。このサンプル例は行カウント値を付け足して表示しまうす。

a="HSP\nプログラミング\n文字列\n行ごとに\n表示" ;元々の文字列

sdim data,100

repeat
  getstr data,a,cont ;文字列を取り出してdataに代入
  if strsize=0:break ;取り出した文字列がない場合はループからぬける

  mes ""+cnt+" | "+data+""
  cont+=strsize ; 次のインデックスに移動
loop

mes "終わり"

イコールを基準に切り出す例です。

a="size1=200\nsize2=777\nstr1=文字列\nstr2=HSP" ;元々の文字列

sdim data,100
sdim data2,100

repeat
  getstr data,a,cont,'=' ;イコールまでの文字列を取り出してdataに代入
  if strsize=0:break

  cont+=strsize

  getstr data2,a,cont ;イコールより後ろの文字列をdata2に代入
  if strsize=0:break

  mes ""+data+" のデータは "+data2+" です"
  cont+=strsize

loop

mes "終わり"

notesel・noteload

HSPからテキストファイルを読み込む命令です。readme.txtというTXTファイルを読み込んでそのまま表示します。

notesel data ;テキストファイルの読み込み
noteload "readme.txt"

mes data

HSP入門MENU

HSP入門1 : 文字の表示、タイトルバー
HSP入門2 : ループ、ラベル
HSP入門3 : 色、ポジション
HSP入門4 : 文字処理
HSP入門5 : 日時・時間
HSP入門6 : フォント、画像
HSP入門7 : ウィンドウ、ダイアログ

 

Q&A (準備中)

0.HSPを利用していくうえでポイントは?

1. HSPでプログラム言語を作成できる?
 ちょっと難しいです。HSPはインタプリタというスタイルの言語なので。

2. ウィンドウにメニューを作成するには?
 Windows APIというのを使うと作成できるみたいですが、分からない人ようにメニューを表示するHSPモジュールが付いてます。「mod_menu.as」というファイルです。

3.ダイアログボックスで「はい」「いいえ」以外の文字を表示するには?
 できません。Windows APIというのを使うとたがう種類のダイアログは表示できますが、文字はいじれません。

4.ホームページをブラウザで開きたい。
 execが使えます。URアドレスを指定して起動タイプは16です。デフォルト設定になってるインターネットブラウザで立ち上がります。

〜〜〜〜〜

HSP

PSH x HSP | HSP講座 | 実行ファイルの作成方法 | オブジェクトの用意 | 音楽・動画の再生 | HSPの用語