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


HSPTV!掲示板


未解決 解決 停止 削除要請

2017
0218
ねるこ行数の取得3解決


ねるこ

リンク

2017/2/18(Sat) 09:36:16|NO.78272

題名のとおり、文字列変数の行数を取得したいです。
コンソールのように、Enterでコマンドを送信するようにしたいのでcomboxで行数が2行以上になったら
コマンドを実行してcomboxの内容を初期化、としているのですが
notemaxやnoteinfo(0)だと思い通りの動作をしません。

if noteinfo(0) >=2:gosub *send
だとEnterを二度押して3行にしないと反応せず、

if noteinfo(0) >=1:gosub *send
だとEnterを押さずとも常時反応してしまいます。
notemaxでも同様です。
noteinfoの使い方を間違っていますか?


*main repeat if noteinfo(0) >= 2:gosub *send await loop *send noteget scmd,0 //scmdに対して処理 return



この記事に返信する


砂時 計

リンク

2017/2/18(Sat) 12:14:56|NO.78273

noteinfo(0) notemax とも、質問者さんの記載のとおり
note文字列の最後が改行で終わっている場合
最後に空行がある とはカウントしないようになっています。
例えば以下を実行すると4行とはならず 3行 となります。

s = "a\nb\nc\n" notesel s mes strf("%d行", noteinfo(0))

似たような方針で Enter で送信する例としては以下のようにできると思います。

count = 0 scmd = "" mesbox scmd, 120,60 id = stat *main repeat if instr(scmd,0,"\n") >= 0:gosub *send wait 1 loop *send //scmdに対して処理 title strf("%d,",count) + scmd count++ strrep scmd,"\n","" // scmd = "" objprm id,scmd return

※本当は Windows に mesbox の Enter イベントを検知する方法とかが
ありそうですがそっちの方法はわからないです。すみません。



ねるこ

リンク

2017/2/18(Sat) 13:13:59|NO.78274

行数ではなく改行があるかでチェックすればよかったのですね。
noteinfo、notemaxの仕様についてもありがとうございます。
思い通りに動作させることができるようになりました。



osakana

リンク

2017/2/18(Sat) 23:29:58|NO.78285

スレッドのタイトルが「行数の取得」なので
目的が、改行など特定の文字や文字列の数を数える事であるなら
以下のやり方で良いのですが、

text = "対象の文字列" search = "調べたい文字列" strrep text, search, search count = stat mes "" + count + " 個"
もし、単にエンターキーが押された事を検出したいという事なら
ループを回した中で単純に getkey 命令や stick 命令で
取得するのも良いかもしれません。

また以下の様に onkey 命令を使用すれば
主にツール系など用途を選ぶかもしれませんが
簡単に効率的かつ確実性の高いキーの検出が出来ます。

scmd = "" mesbox scmd, 200, 100 onkey *send *send if iparam = 13 :mes "Enter" stop
勘違いや的外れであればすみません。
#一部書き直しました(二回)



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