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


HSPTV!掲示板


未解決 解決 停止 削除要請

2010
0804
KDテキストファイルの内容を検索したい5解決


KD

リンク

2010/8/4(Wed) 22:41:26|NO.34263

単語を入力 → テキストファイルを検索 →
入力した単語+その下の行も同時に表示
といったのを作りたいのですが、なかなか出来ません。

例えばtestの内容が

ABC
説明○○○
説明×××
DEF
説明○○○
説明×××

だとしたら、
ABCを検索すると、ABC+下の2行を表示。
DEFを検索すると、同じようにDEF+下の2行を表示したいのですが…


notesel a noteload "test.txt" *入力 t="" input t,100,20,5 ;検索したい単語を入力 button "検索",*結果 stop *結果 gosub *clear w=instr(a,,t) ;入力した単語を検索(ここで悩んでます) repeat 3,w noteget b,w mes b w=w+1 loop stop *clear clrobj color 255,255,255:boxf color 0,0,0:pos 0,0 return

instr で検索したいのですが、
どうやら変数を指定しても無理なようで、何も表示されません。
何か他に方法は無いでしょうか?



この記事に返信する


SYAM

リンク

2010/8/4(Wed) 23:03:23|NO.34266

instrは文字数(全角は2文字扱いで)で値を返します。
notegetには行数を与えます。
文字数を得て、それを行数として与えてしまったのではおかしくなってしまいますね。


notesel a noteload "test.txt" *入力 t="" input t,100,20,5 ;検索したい単語を入力 button "検索",*結果 stop *結果 gosub *clear w=instr(a,,t) ;入力した単語を検索(ここで悩んでます) ret = 0 repeat w if(wpeek(a,cnt)==0x0a0d):ret++ loop repeat 3 noteget b,ret+cnt mes b loop stop *clear clrobj color 255,255,255:boxf color 0,0,0:pos 0,0 return

これでホントに問題ないかちゃんと確かめてはいませんが(こら)、一応検索できていると思います。
文字数から行数に変換するために、対象のテキストデータの先頭からその文字までの間にいくつ改行(0x0a0d)があるかを調べています。



ORZ

リンク

2010/8/4(Wed) 23:08:48|NO.34267

いっそこうしたほうがわかりやすくて楽でねーか?

gosub *clear repeat noteinfo(0) noteget check,cnt if check=t:{ cn2=cnt repeat 3 noteget b,cn2+cnt mes b loop break } loop stop

例によって動作未確認。



HSP初心者

リンク

2010/8/4(Wed) 23:29:05|NO.34268

お粗末なソースですがinstr無しで書いてみました。(5分ぐらいでやっけたので
間違ってるとこあるかも多めにみてください)


notesel a noteload "test.txt" *入力 t="" input t,100,20,5 ;検索したい単語を入力 button "検索",*結果 stop *結果 gosub *clear      notesel a      repeat notemax    notesel a    noteget b,cnt  if t=b {     mes b     chk=cnt    repeat 2     chk=(cnt+1)                notesel a                noteget c,chk mes c     wait 1    loop  break } wait 1 loop //repeat //w=instr(a,,t) ;入力した単語を検索(ここで悩んでます) //repeat 3,w //noteget b,w //mes b //w=w+1 //loop stop *clear clrobj color 255,255,255:boxf color 0,0,0:pos 0,0 return

もっといいやり方は先輩方が知ってると思います。
たとえば
ABC
説明○○○
説明×××
と、txtに保存するんじゃなくて、ABC'説明○○○'説明×××という感じで保存すれば、
また違うコマンドが使えると思います。
保存の仕方一つでソースの行数も短縮することも出来ると思います。



SYAM

リンク

2010/8/4(Wed) 23:43:56|NO.34269

orzさんのはそのままだと行単位で一致しないとヒットしませんが、行ごとに検索するのは確かに分かりやすいし楽ですね。



KD

リンク

2010/8/5(Thu) 01:18:25|NO.34272

まさかinstrで返される値が文字数だったとは… 初歩的なミスでした、すみません。。
保存の仕方も勉強になりました。
皆様、回答ありがとうございました。



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