HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2009
1222
cerator検索14解決


cerator

リンク

2009/12/22(Tue) 06:11:08|NO.29395

メモ帳のように正規表記を用いることがてきない検索は
どうしたら実現できるのでしょうか。
教えてください。



この記事に返信する


窓口

リンク

2009/12/22(Tue) 07:17:20|NO.29396

[ instr ] でヘルプ検索してみてください。



cerator

リンク

2009/12/22(Tue) 18:43:38|NO.29398

instrでは最初の一回のみしか検索されません。
loopもうまくできません。
"abcdefabc"において"abc"を二回検索できる方法はないのでしょうか。



Hatter

リンク

2009/12/22(Tue) 18:49:59|NO.29399

僕はその手の機能をstrmid,strlen,instrで作ったことあるよ〜

loopして、うまくインデックスを調整すればok!

まあがんばってね〜



inovia

リンク

2009/12/22(Tue) 18:53:50|NO.29400

instr のインデックス を利用しましょう。


s="abcdefabc" repeat ref=instr(s,i,"abc") if ref=-1:mes ""+cnt+"件発見!":break i+=ref mes i i++ loop



Kpan

リンク

2009/12/22(Tue) 21:13:15|NO.29403

VBScript.RegExpを使った検索も付属サンプルに。
> sample\comobj\comtest8.hsp



KA

リンク

2009/12/22(Tue) 22:00:31|NO.29406

>>メモ帳のように正規表記を用いることがてきない検索は
>>どうしたら実現できるのでしょうか。

 →すこし文章が変です、今一度読み返してみましょう。

hspで”正規表現で検索する”ソフトを作りたいのだと思いますが、
その正規表現にも数種類有ったと思います。

どちらにせよ、正規表現の解釈は自分で考えるなりDLLを使うなりして、既出の様に
するしか有りません。



cerator

リンク

2009/12/22(Tue) 22:55:15|NO.29409

>hspで”正規表現で検索する”ソフトを作りたいのだと思いますが、
私は、正規表現を使用できない(=メタ文字もただの文字扱い)検索方法を
探していたのです。
ところで、instrは正規表現を用いることはできないのですか?



Hatter

リンク

2009/12/22(Tue) 23:23:18|NO.29410

> 私は、正規表現を使用できない(=メタ文字もただの文字扱い)検索方法を
> 探していたのです。
> ところで、instrは正規表現を用いることはできないのですか?

だんだん質問の意図が分からなくなってきました。
まず、instrが正規表現を用いる用いていないかは適当な文字列で自分で確かめたらドウですか?
(ちょっと意味が分からないので答えようが無い)

ただ一ついえるのはHSP上では文字列の中で\は特殊文字として扱われること。
例えばinstrで改行を探した場合は\nで探せますし、\nという文字列を探す場合には\\nで調べられ(はず...)という事.



tsuka

リンク

2009/12/22(Tue) 23:29:47|NO.29411

もう一度、改めて質問を書いてみてください。
このスレッドに、でいいですから。



cerator

リンク

2009/12/22(Tue) 23:44:19|NO.29412

たとえば、"2000\nXP"という文字列において"2000|XP"を検索するとします。
このとき、正規表現を用いて検索すると、2回ヒットします。
しかし、私が求めているのは「"2000|XP"という文字列の検索」であって、
「"2000"と"XP"の両方を検索する」という意味ではないのです。



SYAM

リンク

2009/12/22(Tue) 23:54:46|NO.29413

instrでできます。
instrは検索の開始位置を指定できるようになっていますから、
結果が -1 になるまで検索開始位置をずらしながらループさせればOKでしょう。


buf = "abcdefabc" index = 0 repeat i = instr(buf,index,"abc") if(i<0):break mes "出現位置:"+(index+i) index += i+1 loop

instrでは正規表現は使えません。単純な文字列パターンの完全一致のみ検索できます。



SYAM

リンク

2009/12/23(Wed) 00:03:25|NO.29414

ってよく見たら
>loopもうまくできません。
って書いてあったんですね。 大丈夫、できます。

先のサンプルの変数 index は、instr関数が検索を開始する位置です。
最初は検索対象の文字列の先頭をさしています。

instr関数は、検索を開始する位置を指定すると、その位置からの文字数を結果として返しますから、それを検索開始位置と足すと、先頭からの文字数になります。
で、次の検索開始位置は、今回見つけた位置の次の文字からです。つまり、検索開始位置+結果+1 ですね。これをloopの次の回の index にします。

instr関数は対象の文字列が見つからないと -1 を返すので、それが帰ってきたら loopを抜けます。



Hatter

リンク

2009/12/23(Wed) 00:08:22|NO.29415

SYAMさんのおしゃっるとおりです。というか、NO.29400をもっとちゃんと読め。
それで、問題が生じてからあれこれ書け!!
あのスクリプトを実行しても特に正規表現の問題は起こらなかったぞ。
本当なぜあの後
> ところで、instrは正規表現を用いることはできないのですか?
どうしたらこんなふざけた質問が出来るんだー!実際、自分で確かめろー!
そんな事掲示板で聞くな!
(以下、ほぼそのまんまinoviaさんのスクリプトを拝借させていただきました)

s="abc2000de2000|XPfabXPcrgr2000|XP" mes "検索文字列:"+s repeat ref=instr(s,i,"2000|XP") if ref=-1:mes ""+cnt+"件発見!":break i+=ref mes ""+i+"文字目:"+strmid(s,i,7) i++ loop



cerator

リンク

2009/12/23(Wed) 00:28:48|NO.29417

Hatterさん他皆様、
すみませんでした。私の意味不明文にお付き合いいただきありがとうございました。
これで解決しました。
皆様ありがとうございました。



ONION software Copyright 1997-2021(c) All rights reserved.