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


HSPTV!掲示板


未解決 解決 停止 削除要請

2009
0513
アルマティカ数値文字参照のコードを普通の文字列に戻す方法6解決


アルマティカ

リンク

2009/5/13(Wed) 22:29:21|NO.25131

 とあるHTMLソースを解析すようなプログラムを作っていたんですが、
文字参照を元の文字列に変換する事が、自力ではできなかったので書き
込みをさせてもらいました。
 いい方法はありませんでしょうか?



この記事に返信する


窓口

リンク

2009/5/14(Thu) 11:00:12|NO.25134

たぶん違うと思いますが、こういうことですか?


a = "hsp!" sdim c,4 b = lpeek(a,0) ; 文字列の数列変換 lpoke c,0,b ; 数列の文字列変換 mes a ; 変換前の文字列 mes b ; 変換後の文字列 mes c ; 復帰した文字列



SYAM

リンク

2009/5/14(Thu) 13:10:16|NO.25136

力技ですが、以前貼ったサンプルを改造して、キーワードを配列で指定できる文字列置換関数モジュールにしてみました。
これを使えば、どんな参照でも一応は対応できます。

#module #define INTMAX 0x7ffffff // multireplace() : 入力文字列内の文字列を置換して返す. // s : 入力文字列. // srch : 検索文字列の配列. // rep : 置換文字列の配列. // nbword : 検索、置換文字列配列の要素数. #defcfunc multireplace str s, array srch, array rep, int nbword src = s dest = "" dim srchidx,nbword srch_end=0 // 検索し終えた区切り文字の数. repeat nbword srchrator=srch(cnt) : index=0 gosub *GET_NEXTINDEX : srchidx(cnt)=i loop *CUTTING_NEXT if(srch_end<nbword){ nextidx=INTMAX repeat nbword if(srchidx(cnt)<nextidx){ nextidx=srchidx(cnt) minidx=cnt } loop srchlen=strlen(srch(minidx)) dest += strmid(src, idx, nextidx-idx) + rep(minidx) idx=nextidx+srchlen repeat nbword if(srchidx(cnt)=nextidx){ srchrator=srch(cnt) : index=idx gosub *GET_NEXTINDEX : srchidx(cnt)=i } loop goto *CUTTING_NEXT } dest += strmid(src, idx, INTMAX); return dest *GET_NEXTINDEX i=instr(src, index, srchrator) if i<0 : i=INTMAX:srch_end++:return i=index+i:return #global

以下のスクリプトで、このモジュールを使って文字参照を4種類だけ置換してみます.
※例文はそこいらのページから適当に切り出してきたものです.


sdim srch,8,4 sdim rep,8,4 src="& Mid(myInputValue, i1, k1-i1) & " " & "=>" & vbTab & myOutput &" srch(0)="<" srch(1)=">" srch(2)="&" srch(3)=""" rep(0)="<" rep(1)=">" rep(2)="&" rep(3)="\"" sdim ret,1024 ret = multireplace(src,srch,rep,4) mes ret
もちろん、これでは置換テーブルが少なすぎますから、もっと本格的にやるならテーブルを追加しないといけません.
もっと真っ当な方法があるものならそっちがいいでしょう...

---
それ以前に置換モジュールは今さっき作ってろくすっぽテストしてません。取扱注意(こら



SYAM

リンク

2009/5/14(Thu) 13:18:03|NO.25137

……。

ブラウザで見たらサンプルコードの文字参照が全部解決されちゃってる。
そりゃ、そうか…。


お手数ですが、ページのHTMLソースから切り出すか、または

src=”&quot;&amp; Mid(myInputValue&#44; i1&#44; k1−i1) &amp; &quot; &quot; &amp; &quot;=&gt;&quot; &amp; vbTab &amp; myOutput &amp;&quot;” srch(0)=”&lt;” srch(1)=”&gt;” srch(2)=”&amp;” srch(3)=”&quot;”
を半角にしてください.
ううう・・・。



LonelyWolf

リンク

2009/5/14(Thu) 16:41:28|NO.25138

src="&quot;&amp; Mid(myInputValue&#44; i1&#44; k1-i1) &amp; &quot; &quot; &amp; &quot;=&gt;&quot; &amp; vbTab &amp; myOutput &amp;&quot;"
srch(0)="&lt;" srch(1)="&gt;" srch(2)="&amp;" srch(3)="&quot;"
ですね。

&lt;と表示させるなら、&amp;lt;と書けばいいかと。



SYAM

リンク

2009/5/14(Thu) 16:51:00|NO.25139

おおお わざわざありがとうございます。
文字参照が文字参照にならないように、文字参照を使う訳ですね。成程…。



アルマティカ

リンク

2009/5/19(Tue) 18:16:46|NO.25258

 遅れてすみません
 サンプルまでありがとうございました。無事に解決です



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