みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
再帰を使ったLet関数
自分なりに再帰を使ったLet関数にチャレンジしようとして、つまづいています。
目的としては、
【例】
「カーネーションパーティー」 → 「カアネエションパアティイ」
のように、「音引きを直前の文字の母音で置き換える」というものです。
以下、自分の書いたソースですが、「カーネーションパーティイ」のように最後の音引きのみ置換されてしまいます。
(おそらく、ループの最後の周の結果だけが取得されている)
何がいけないのでしょうか?
Let([
$txt="カーネーションパーティー";
$i=0;
$res="";
$Onbiki = "ー" ;
$fnc="Case($i= PatternCount ( $txt ; $Onbiki) ; $res ; /*終了条件:iが音引きの個数になったら*/
Let([
$i=$i+1;
$OnbikiPos = Position ( $txt ; $Onbiki ; 1 ; $i ) ; /*音引きの位置(i回目)*/
$PreChar = Middle ( $txt; $OnbikiPos-1 ; 1 ) ; /*音引きの直前の一文字*/
$ReplChar = /*音引きと置換する文字*/
Case (
PatternCount ( \"あぁかがさざただなはぱばまやゃらわアァカガサザタダナハパバマヤャラワ\" ; $PreChar ) ; \"ア\" ;
PatternCount ( \"いぃきぎしじちぢにひぴびみりイィキギシジチヂニヒピビミリ\" ; $PreChar ) ; \"イ\" ;
PatternCount ( \"うぅくぐすずつっづぬふぷぶむゆゅるウゥクグスズツッヅヌフプブムユュル\" ; $PreChar ) ; \"ウ\" ;
PatternCount ( \"えぇけげせぜてでねへぺべめれエェォケゲセゼテデネヘペベメレ\" ; $PreChar ) ; \"エ\" ;
PatternCount ( \"おぉこごそぞとどのほぽぼもよょろオォコゴソゾトドノホポボモヨョロ\" ; $PreChar ) ; \"オ\" ;
\"■\");
$res = Replace ( $txt ; $OnbikiPos ; 1 ; $ReplChar )
]; Evaluate($fnc))
)"
];
Evaluate($fnc)
)
また、Let関数の場合、スクリプトと違って、処理の途中で変数の中身を確認したりできませんが、みなさんどうやってデバッグしているのでしょうか?
どなたかアドバイスをお願いします。
Offline
最初から最後まで置換前のテキストが$txtになっているのが原因では?
$txt="カーネーションパーティー";
これを
$res="カーネーションパーティー";
にして、式中の$txtを全て$resに変更すれば動きそうな。
Offline
micさん、ありがとうございます。やってみました。
下記のソースを計算フィールドに入れてみて、結果は「カアネーションパアティー」2番目と4番目だけ置換されないという動作がわかりません。
うーん、困りました。
Let([
$res="カーネーションパーティー";
$i=0;
$Onbiki = "ー" ;
$fnc="Case($i= PatternCount ( $res ; $Onbiki) ; $res ; /*終了条件:iが音引きの個数になったら*/
Let([
$i=$i+1;
$OnbikiPos = Position ( $res ; $Onbiki ; 1 ; $i ) ; /*音引きの位置(i回目)*/
$PreChar = Middle ( $res; $OnbikiPos-1 ; 1 ) ; /*音引きの直前の一文字*/
$ReplChar = /*音引きと置換する文字*/
Case (
PatternCount ( \"あぁかがさざただなはぱばまやゃらわアァカガサザタダナハパバマヤャラワ\" ; $PreChar ) ; \"ア\" ;
PatternCount ( \"いぃきぎしじちぢにひぴびみりイィキギシジチヂニヒピビミリ\" ; $PreChar ) ; \"イ\" ;
PatternCount ( \"うぅくぐすずつっづぬふぷぶむゆゅるウゥクグスズツッヅヌフプブムユュル\" ; $PreChar ) ; \"ウ\" ;
PatternCount ( \"えぇけげせぜてでねへぺべめれエェォケゲセゼテデネヘペベメレ\" ; $PreChar ) ; \"エ\" ;
PatternCount ( \"おぉこごそぞとどのほぽぼもよょろオォコゴソゾトドノホポボモヨョロ\" ; $PreChar ) ; \"オ\" ;
\"■\");
$res = Replace ( $res ; $OnbikiPos ; 1 ; $ReplChar )
]; Evaluate($fnc))
)"
];
Evaluate($fnc)
)
Offline
それに追加で、
$OnbikiPos = Position ( $txt ; $Onbiki ; 1 ; $i ) ; /*音引きの位置(i回目)*/
を
$OnbikiPos = Position ( $txt ; $Onbiki ; 1 ; 1 ) ;
にするか、$i を減らしていくか、にしましょう。
Offline
Shinさん、ありがとうございます。できました!
iを減らしていき、0になったら終了、に変更しました。
Let([
$res="カーネーションパーティー";
$Onbiki = "ー" ;
$i=PatternCount ( $res ; $Onbiki); /*音引きの個数*/
$fnc="Case($i= 0 ; $res ; /*終了条件:iが0になったら*/
Let([
$i=$i-1;
$OnbikiPos = Position ( $res ; $Onbiki ; 1 ; 1 ) ; /*音引きの位置(常に1個目)*/
$PreChar = Middle ( $res; $OnbikiPos-1 ; 1 ) ; /*音引きの直前の一文字*/
$ReplChar = /*音引きと置換する文字*/
Case (
PatternCount ( \"あぁかがさざただなはぱばまやゃらわアァカガサザタダナハパバマヤャラワ\" ; $PreChar ) ; \"ア\" ;
PatternCount ( \"いぃきぎしじちぢにひぴびみりイィキギシジチヂニヒピビミリ\" ; $PreChar ) ; \"イ\" ;
PatternCount ( \"うぅくぐすずつっづぬふぷぶむゆゅるウゥクグスズツッヅヌフプブムユュル\" ; $PreChar ) ; \"ウ\" ;
PatternCount ( \"えぇけげせぜてでねへぺべめれエェケゲセゼテデネヘペベメレ\" ; $PreChar ) ; \"エ\" ;
PatternCount ( \"おぉこごそぞとどのほぽぼもよょろオォコゴソゾトドノホポボモヨョロ\" ; $PreChar ) ; \"オ\" ;
\"■\");
$res = Replace ( $res ; $OnbikiPos ; 1 ; $ReplChar )
]; Evaluate($fnc))
)"
];
Evaluate($fnc)
)
Offline
Pages: 1
[ Generated in 0.029 seconds, 9 queries executed - Memory usage: 519.07 KiB (Peak: 523.61 KiB) ]