|
haru さん、こんばんは。
杉浦 まさき です。
#すんません、ちと長いですm(_ _)m。>ALL
> 数字の場合、通常のチェック(マイナス符号、小数点)と、特殊
>な場合のチェック、\ マーク、カンマ(,)を含む場合があると思い
>ます。
う〜ん、円記号やカンマとかは単純に除去すればOKっぽいですが、
もしそうなら GSUB() で思いつく限りの文字を空文字に置換すれば
今のままのDLLでもいけそうです。
$s = "\\ 12,345,678"; // 元文字列
$s = dllfuncstr("GSUB", $s, " ", "", -1); // 空白の除去
$s = dllfuncstr("GSUB", $s, "\\", "", -1); // 円記号の除去
$s = dllfuncstr("GSUB", $s, ",", "", -1); // カンマの除去
// ... とにかくあるだけ繰り返し
いちいち GSUB() を呼び出すのが面倒なら、GETTOKEN() で
セパレータ文字に該当文字を全て指定するという手もあります。
#除去する文字が多い場合はこちらの方が効率的ですね。
$s = "\\ 12,345,678";
$s = dllfuncstr("GETTOKEN", $s, " \\,"); // "12" が入る
while (dllfunc("HASMORETOKENS")) {
// 以下 "345", "678" が連結される
$s = $s + dllfuncstr("GETTOKEN", "", " \\,");
}
// $s == "12345678" になっている
で、話が前後してしまいましたが、ここまでの作業で
符号、小数点、数字からなる文字列にできますので、
あとはマクロの val() 関数に渡せば数値として取り出せます。
#小数点ありの数をどうするかは haru さんが何をやりたいかで
話が変わってくるので、これ以上はコメントできません。
> 日付は、その区切り文字として、/.が、考えられます。例えば
>yy/mm/dd yy.mm.dd 等です。加えて、閏年とか 11月は 31日はあり
>えない等もみていただけると、申し分ありません。
こちらも数値の切り出し作業自体は GETTOKEN() でいけそうなので、
残るのは年月日としてありえるかどうかのチェックだけに
絞れそうですね…。<申し分ないのしか残ってない(笑)
で、これは既に TAKA さんが [02724] にて
チェックマクロを紹介してくださっているので、
結局のところ既存のもので haru さんが望むことは
できるわけですが、さてどうしたもんでしょうか?
それでもDLLの関数がほしい!ということであれば、
日付の妥当性チェックの関数は用意したいですが、
もうちょっと日付関係で(しかもマクロでは無理or大変な)ネタが
あると、作り手としても追加のしがいがあっていいかなぁ…と(笑)。
#余談になりますが、ファイル操作関係で致命的なバグがあったんで
近日(Ver.1.XX としては最後?の)バージョンアップをします。>鯖&DLL
|
|