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


HSPTV!掲示板


未解決 解決 停止 削除要請

2021
1010
何行目か7解決


リンク

2021/10/10(Sun) 21:22:24|NO.94118

指定した文字が変数の何行目にあるか、というのを調べる方法はありますか?



この記事に返信する


沢渡

リンク

2021/10/10(Sun) 22:28:01|NO.94119

こういう感じで、まず該当する文字列を検索したあと、
その位置までのリターンコードの数を数えて何行目かを調べる方法はどうでしょうか。

#module //instr_line(p1,p2) //文字列p1の中からp2を検索し、それが何行目にあるのかを返す。(最初の行は0行目) //該当する文字が無い場合は-1を返す。 #defcfunc instr_line str _s,str t,local a,local b,local x,local y,local z,local s,local l s=_s : a=instr(s,0,t) : if a=-1 : return -1 x=0 : y=0 : z=0 : l=strlen(s) repeat z=instr(s,x,"\r") : if z=-1 : break x+=z : if x>a : break y++ : x++ if x>=l : break loop return y #global //以下、使用例 s="あ\nい\nうえお\nか\nき" mes instr_line(s,"あ") mes instr_line(s,"い") mes instr_line(s,"う") mes instr_line(s,"え") mes instr_line(s,"お") mes instr_line(s,"か") mes instr_line(s,"き") mes instr_line(s,"く") //これは該当する文字がないので-1が返る



リンク

2021/10/10(Sun) 22:38:24|NO.94121

沢渡さんありがとうございます!
できれば

mes instr_line(s,"あ")

ここを変数でできるようにしたいのですが、お願いできないでしょうか?



沢渡

リンク

2021/10/11(Mon) 09:31:56|NO.94123

「変数でできるように」とは、どういうことでしょうか?
たとえば a=instr_line(s,"あ") とでもすれば「あ」が出てくる行が変数aに代入されますし、
instr_lineの引数に文字列変数を使うこともできますが。



とあるプログラマ

リンク

2021/10/11(Mon) 13:06:31|NO.94124

notefindという命令があったり

string = "あ\nい\nう\nえ\nお\nか\nき\nく\nけ\nこ\n" notesel string // 第2引数=検索モード (0: 完全一致、1:先頭一致、2:部分一致) mes notefind("あ", 0) mes notefind("い", 0) mes notefind("う", 0) mes notefind("え", 0) mes notefind("お", 0) ka = notefind("か", 0) ki = notefind("き", 0) ku = notefind("く", 0) ke = notefind("け", 0) ko = notefind("こ", 0) // 見つからないときは-1 mes notefind("ん", 0)



沢渡

リンク

2021/10/11(Mon) 16:41:03|NO.94125

うへぇ、本当だ。
私のやったこと完全に無駄じゃないですか。



zrs90(5さい)

リンク

2021/10/11(Mon) 18:04:00|NO.94126

notefind命令について。

とあるプログラマさんは、この件を全てご存知の上で
ソースを投稿されてます。

...なので、これは私、zrs90(5さい)の失敗した話です。
私は、notefind命令がHSP3に実装された際
スクリプトエディタの命令検索に使おうと思って
大失敗したことがあります。今回、ちょうど良いソースが
あったので、例として、使わせていただきます。


とあるプログラマさんのソースを書き換えて

string = "あ\nい\nう\nえ\nお\nう\nか\nき\nく\nけ\nこ\nう"
...とします。

...で う を検索する際、3、6、最終行に入っている訳ですが

notefind命令は、同じ検索文字列が複数個入っている場合も
検索で一致した最初の行(index)だけを、戻り値としています。

この場合、う を検知したら、次行以降〜最終行まで
notefind命令による検索処理を繰り返さないとダメです。


...これ以外で良い方法がありましたら、ご存知の方は教えて下さい。
話を脱線させて申し訳ありません。



リンク

2021/10/11(Mon) 19:43:58|NO.94130

お三方本当にありがとうございました!
おかげで問題が解決しました!



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