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


HSPTV!掲示板


未解決 解決 停止 削除要請

2011
0412
ハイパー変数を複数行で9解決


ハイパー

リンク

2011/4/12(Tue) 01:43:49|NO.38336

NO.38272(入力された文字を変換する)のスレッドで紹介されていた
SYAMさんのスクリプトを応用しています。
文字置換の変数を一行に収めるのが困難なので複数行にしようと思います。


sdim search,100,10 sdim replace,100,10 search.0 = "あ","い","う","え","お" replace.0= "A","B","C","D","E" search.5 = "か","き","く","け","こ" replace.5= "F","G","H","I","J"
このようにしているのですが、これだと[か行]の変換がされません。
どのようにすれば複数行にできるのでしょうか?



この記事に返信する


たんす

リンク

2011/4/12(Tue) 02:01:03|NO.38337

もしかして

dest = multireplace(in, search, replace, 5)
のまま使っていて要素数が5個(あ〜お)で置換使用としているからでは無いでしょうか。

その場合は要素数10個(あ〜こ)にすれば対応するかと思います。

dest = multireplace(in, search, replace, 10)



ハイパー

リンク

2011/4/12(Tue) 16:32:48|NO.38341

おっしゃるとおりでした
ありがとうございます



ハイパー

リンク

2011/4/12(Tue) 18:37:44|NO.38343

スレタイと概要が違いますが少し悩んだことがありますので質問させていただきます。


search.0 = "あいうえお!","えお!" replace.0= "あ","い"

このスクリプトで「あいうえお!」の変換をすると、結果が「あい」になります。
原因は分かるんですが、文字列を一つの文字としてとらえる方法はないのでしょうか?



p、USAGI

リンク

2011/4/12(Tue) 18:52:07|NO.38344

instrを使ってみるとか?



ハイパー

リンク

2011/4/12(Tue) 21:44:35|NO.38353

とりあえず解決にしておきます
ありがとうございます



SYAM

リンク

2011/4/12(Tue) 22:58:25|NO.38357

私のモジュールは、検索としては「あいうえお!」と「えお!」を一まとめにして検索しています。

しかし、検索キーワードが他の検索キーワードを内包していたりするとおかしくなります。

処理としては全キーワードの最初の出現位置を探し出して一番最初に出てくるものを置換しているわけですが、その後もう一度検索をせず、次に近かったものの置換処理をしてしまっています。
つまり、一つ置換したことで次の置換対象が消滅するような場合に、ないはずの文字列の置換後の文字列を追加してしまうようです。

例に挙げられたキーワードと処理対象ですと、

1文字めと4文字めにキーワード発見

1文字目からの あいうえお! を あ に置換して結果に追加

4文字目からあったはずの えお! を い に置換結果に追加

終了
……という残念なことになってるわけですね…



ハイパー

リンク

2011/4/12(Tue) 23:10:51|NO.38358

そうなんですよね…



たんす

リンク

2011/4/17(Sun) 15:08:57|NO.38480

作ってみました。

#module RFTF #defcfunc ReplaceFromTheFront str s, array srch, array rep, int nbword Dest = s Srch_Index=0 repeat Dest_Len = strlen(Dest) FirstHit = Dest_Len repeat nbword Hit = instr(Dest,Srch_index,srch(cnt)) if Hit = -1 :continue if FirstHit > Hit { FirstHit = Hit FirstHitNumber = cnt } loop if FirstHit = Dest_Len :break Srch_Len = strlen(srch(FirstHitNumber)) Dest = "" + strmid(Dest,0,FirstHit + Srch_index) + rep(FirstHitNumber) + strmid(Dest,Srch_index + FirstHit + Srch_Len,Dest_Len) Srch_Index = strlen(strmid(Dest,0,FirstHit + Srch_index) + rep(FirstHitNumber)) wait 1 loop return Dest #global
関数の呼び出し方はSYAMさんのモジュールと同じです。

先頭から検索・置換し、置換位置から検索しなおして置換していきます。
なお、置換対象配列srchの要素番号の小さいほうが優先されます。

例)
元文字列a ="あいうえお!"
検索配列srch="あい","あいう"
置換配列rep ="A","B"
結果Dest ="Aうえお!"



ハイパー

リンク

2011/4/18(Mon) 20:14:15|NO.38510

これは便利そうですね
是非使わせていただきます
ありがとうございました



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