その他の文字列命令
文字列中のキーワードのある場所を調べたい場合はinstr命令を使いましょう。
書式は「instr 結果を代入する変数,検索する変数,検索する文字列,検索開始位置」となります。
p1の結果を入れる変数に検索する文字列の場所を先頭を0として何文字目にあるかが入ります。
p3は検索したい語をダブルクォートで囲んで指定します。変数でも指定できないことはないですが。
p4の検索開始位置を省略すると0文字目からになります。
moji = "abcdefghijklmnopqrstuvwxyz"
mes moji
instr basyo,moji, "e", 0
mes "「e」は" + basyo + "番目に存在します"
instr basyo,moji, "stu", 0
mes "「stu」は" + basyo + "番目に存在します"
stop
日本語の文字列を検索するときに注意しないといけないところは、一部の漢字が"\\"と同じになります。
moji = "能楽"
instr basyo,moji, "\\", 0 ; 変数mojiに"\\"は含まれないのに反応する(ないことを示す-1が返らない)
mes basyo
stop
ファイルのパスを調べる時とかは気をつけましょう。
変数内の文字列だけを出力するときにはgetstr命令を使いましょう。
書式は「getstr 結果を代入する変数,読み出す変数,読み出し開始位置,区切りコード」です。
読み出される結果はp2の読み出し元変数の開始位置から改行または終端コードが来るまでとなります。
またp4の区切りコードを指定している場合は改行・終端コード+指定した区切りコードが来るまでです。
instr命令とは違いシングルクォートで文字を囲んで区切りコードを指定します。文字列ではありません。
moji = "abcdefg\nhijklmn\nopqrstu\nvwxyz"
getstr moji2,moji,0
mes moji2
stop
システム変数strsizeに先頭から数えて読み出した次の文字の位置が入ります。
hensuu = "ABCABCBCABBACBBCOABC"
getstr get, hensuu, 2, 'O'
mes strsize
stop
短いですがgetstr命令についての説明はコレで終了します。
フルパス指定しなくてもファイル名だけで操作できるcurdirは手動で変更することができます。
初めはHSPのスクリプトファイルのフォルダがカレントフォルダですが、
オープンダイアログを使うと自動で開いたファイルのパスに変更されます。
手動で変更するにはchdir命令を使用します。
書式は「chdir "変更するディレクトリ"」となります。
chdir "c:\\Program Files"
mes curdir ; 現在のファイル名だけで指定できるフォルダ「curdir」を表示
stop
現在のcurdirより1つ上の階層に移動したい場合は「chdir"../"」としましょう。
1つ上ではなくルートディレクトリの指定は「chdir "/"」か「chdir "/../"」とします。
この章でchdir命令を説明したのは次に説明するdirlist命令を説明したかったからです。
dirlistはカレントディレクトリのファイル一覧を調べる命令です。
書式は「dirlist 一覧を入れる変数,"ファイルマスク",モード」です。
p1の変数には大量のファイル名が入る恐れもありますのでsdim命令で大きめに確保しましょう。
ファイルマスクは指定した拡張子のファイルを一覧します。
p2のモードを省略または0でフォルダを含むすべてのファイルを取得できます。
1でフォルダを除くすべてのファイルを取得できます。
2で隠し属性・システム属性を除くすべてのファイルを取得できます。
3でフォルダ・隠し属性・システム属性以外のすべてのファイルを取得できます。
5で全てのディレクトリを取得できます。
6で全ての隠し属性・システム属性ファイルを取得できます。
7で全てのフォルダと隠し属性・システム属性ファイルを取得できます。
sdim file, 16000
dirlist file, "*.as"
dialog "" + file
stop
取得した一覧はファイルごとに改行が入った形ですので、
メモリーノートパッド命令やリストボックス等にそのまま使用できます。
取得直後システム変数statに取得したファイル数が入ります。
sdim file, 32000
dir = ""
mask = "*"
file = "ディレクトリを選んでください"
pos 0, 5 : mes"ディレクトリ"
pos 100, 0 : input dir, 200
pos 300, 5 : mes "\\*."
pos 325, 0 : input mask, 50
pos 0, 25 : button "一覧", *start
objsize 250, 25
listbox index, 200, file
stop
*start
chdir dir
dirlist file, "*." + mask,1
title "ファイル数 = " + stat
objprm 3,file
stop