|
2011/05/25(水) 00:36:05
ダヴィンチ@ユーザーです。
ReplaceRegular関数を使用してXMLへのコード変換を行い
無事問題は解決致しました。
ありがとうございました。
要望がございます。
できればでいいです。
ReplaceRegular関数は文字列を正規表現で検索して
ヒットしたときは置換した文字列を含めた全体を返しますが
ヒットしなかったときはNULL("")を返します。
このため、複数の文字列の置換を行うときの
変換結果の取得が以下のようなコードになります。
現状-------------------------------
XmlReplaceStr:
{
$$str = $$1;
$$cnv = dllfuncstr("ReplaceRegular", "&", $$str, 0, "&",1);
if ($$cnv != "")
{
$$str = $$cnv;
}
$$cnv = dllfuncstr("ReplaceRegular", "<", $$str, 0, "<",1);
if ($$cnv != "")
{
$$str = $$cnv;
}
return $$str;
}
-------------------------------
これでは、コードが煩雑になりますので
ヒットしなかった場合は「元の文字列(この場合は$$str)」を
そのまま返すように変更して欲しいです。
そうすると以下のようなシンプルなコードが書けます。
もちろん変更後も上記の「現状」のままのコードも
正常に処理が行えますので不具合の発生はないと
思われます。
改良後-------------------------------
XmlReplaceStr:
{
$$str = $$1;
$$str = dllfuncstr("ReplaceRegular", "&", $$str, 0, "&",1);
$$str = dllfuncstr("ReplaceRegular", "<", $$str, 0, "<",1);
return $$str;
}
-------------------------------
とくに強い要望ではありませんが
ご検討をお願いします。
/*
** タイトル:『hidesoft.8:40581| RE 40575 【質問】秀丸メールマクロでXMLフ
ァイル出力』
** 発信日:2011年05月24日(火) 22:25:21
** 発信者:ダヴィンチ1958さん
*/
>
>2011/05/24(火) 22:23:22
>
>こんにちは、秀まるお2さん
>
>ダヴィンチ@ユーザーです。
>
>いろいろご教示いただき助かりました。
>hmjre.dllのReplaceRegular関数か自前の関数で
>行こうかと思います。
>
>ありがとうございました。
>また宜しくお願いします。
>
>/*
>** タイトル:『hidesoft.8:40575| RE 40573 【質問】秀丸メールマクロでXMLフ
>ァイル出力』
>** 発信日:2011年05月24日(火) 10:22:15
>** 発信者:秀まるお2さん
>*/
>> XMLに変換する方だけであれば、"<"、">"、"&"の3つだけエンコードすればよ
>>かったと思います。
>>
>> 逆の変換をするとなるともっと大量にあって大変ですけども。
>>
>>> 変換スピードの点も気になります。
>>
>> "<"等の文字は普通の文章にはそんなに大量に入ってくることは無いと思うの
>>で、速度的にはマクロで処理してもそんなに遅くは無いと思います。むしろ、外
>>部のDLL呼び出しとかで処理したとしても、最終的に秀丸マクロの文字列関係の
>>処理を通るので、結局同じくらいの速度にしかならないと思います。
>>
>> しいて外部dllで処理させるとしたら、hmjre.dllのReplaceRegular関数でやる
>>方法もあるかなぁと思います。
>>
>>> 他にWindows的な標準の対応があればどなたか紹介して
>>> 頂けますか。
>>
>> 今ちょっとgoogleで"xml windows api"で検索したら、Msxml2.DOMDocumentっ
>>ていうオブジェクトがあって、それを例えば秀丸マクロのcreateobject/
>>callmethodで呼び出して使えばいいのかなぁと思いました。
>>
>> 具体的にどういうことが出来るのかまでは調べませんでしたけども。
>>
>> Msxml2.XMLHTTPってオブジェクトを使っていろいろやる例は、実はIKKIさんが
>>作成されたマクロがありまして、それが一番参考になります。(という僕も、大
>>変参考にさせていただいてます)
|
|