みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
文字列中のひらがなの個数をカウントしたくて、カスタム関数を作ってみましたが、うまく動作しません。
どこが悪いのでしょうか? どなたかわかりましたらよろしくお願いします。
(ちなみに再帰を使ったカスタム関数、みなさんはどうやってデバッグしているのでしょうか?)
関数名:HiraganaCount()
引数:txt(下記の例では"航空センターあかし"を代入しています)
Let([
$txt="航空センターあかし";
$num = 0 ; /*ひらがなの個数*/
$len = Length($txt) ; /*文字列の長さ*/
$pos = 0 ; /*何文字目か*/
$tp = Middle($txt;$pos;1);
$code = Code($tp);
$fnc="Case($pos ≥ $len ; $num ; /*終了条件:最後の文字まで判定したら$numを返す*/
Let([
$pos = $pos+1;
$tp = Middle( $txt ; $pos ; 1);
$code = Code( $tp );
$num = $num + ($code ≥ 12353 and $code ≤ 12438)
]; Evaluate($fnc))
)"
];
Evaluate($fnc)
)
Offline
動いていますよ。
ただ、6、7行目は不要でしょう。
Let([
$txt="航空センターあかし";
$num = 0 ; /*ひらがなの個数*/
$fnc="Case ( IsEmpty ( $txt ) ; $num ; /*終了条件:最後の文字まで判定したら$numを返す*/
Let([
$tp = left ( $txt ; 1) ;
$code = Code ( $tp ) ;
$num = $num + ( 12353 ≤ $code and $code ≤ 12438 ) ;
$txt = right ( $txt ; length ( $txt ) - 1)
]; Evaluate ( $fnc )
)
)"
];
Evaluate($fnc)
)
とも書けますよ。
デバッグは、頭の中ですね。
Offline
Shinさん、ありがとうございました。確かに6,7行目、不要ですね。
動いていました。単なる自分の勘違いでした。
Offline
動きますが、
もしも、ひらがな "こーべ" 内の長音「ー」(12540、8213) もカウントするとすれば、
・式は、多少内容を精査・簡素化して、(カレント式内だけなら$→#変数が良)
Let([
$txt="航空センターこ―べタワー";
$flg=0; /*前字はひらがなか*/
$num=0; /*ひらがなの個数*/
$fnc="Case(IsEmpty($txt); $num;
Let([
#chr=Left($txt; 1);
#cod=Code(#chr);
#add=(#cod≥12353 and #cod≤12438) or (#cod=12540 or #cod=8213)*$flg;
$txt=Right($txt; Length($txt)-1);
$flg=#add;
$num=Sum($num; #add)
]; Evaluate($fnc))
)"
];
Evaluate($fnc)
)
●デバックは、可能です。
・EvaluationError関数の利用を工夫、
・テキスト記述した式をEvaluate()内に入れて、
・それをEvaluationError()内で動作試行させ、
・エラーキャッチします。
EvaluationError(Evaluate("テキスト記述式"))
※なお、式を記述するg_テキストフィールドとエラー対応表を用意すると非常に重宝です。
Last edited by Hiro (2018-01-03 16:04:44)
Offline
Pages: 1
[ Generated in 0.009 seconds, 9 queries executed - Memory usage: 509.18 KiB (Peak: 515.98 KiB) ]