みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
お世話になります。
Win10
FileMaker pro16で使用しています。
現在カスタム関数を勉強しており、
「あいう」というテキストがあった場合に、
あいう
あい
あ
いう
い
う
という風にする関数を作成したい思っております。
以下の様なカスタム関数を作成し、
1文字目を階段にすることは出来たのですが、
2文字目以降を階段にする方法に苦慮しております。
Let (
[
length =
Length ( テキスト );
cnt =
1
] ;
Case (
length > 0 ;
テキスト & "¶" & _Stairs_wordMax ( Middle ( テキスト ; cnt ; length-1 ));
)
)スクリプトであれば、loopを使用して達成できたのですが、
カスタム関数を使用する場合どのようにすればよいかご教授いただければ幸いです。
スクリプトのように、loopでcntに1を足せれば出来そうな気がするのですが・・・
恐れ入りますが、よろしくお願い致します。
もう1つ関数を作って、呼び出せはいいのでは。
現バージョンではWhile関数が実装されてるので、いまさらという感じですが。
入れ子の2重ループ計算が必要だから、2重カスタム関数定義より「Wループ計算」一括式の方が今回は簡略でしょう!
(※式は分かり易いように少し冗長に記述)
Let(
[
$txt=テキスト;
$n=Length($txt);
$i=0;
$res=Char(0);
//▼親ループ定義
$LOOP=
"Case($i=$n
; $res
; Let([
$i=$i+1;
$itm=Middle($txt; $i; $n);
$j=0;
$m=Length($itm);
$r=Char(0);
#res=Evaluate($SUB);
$res=List($res; #res)
]; Evaluate($LOOP))
)";
//▼子ループ定義
$SUB=
"Case($j=$m
; $r
; Let([
#itm=Left($itm; $m-$j);
$r=List($r; #itm);
$j=$j+1
]; Evaluate($SUB))
)"
];
Evaluate($LOOP)
)
Offline
himadaneeさん
ありがとうございます。
1つにこだわらずに、2つ目で完成させるということですね。
こちらも挑戦してみようと思います。
Hiroさん
ありがとうございます。
Evaluate関数を使うのですね。
式を理解し、実装したいと思います。
Evaluateを計算式に使用すると、索引が貼れなくなると思っていたのですが、
問題なく貼れるのですね。(私の作り方が悪かったのでしょう・・・。)
リレーションに使用したかったので大変助かりました。
2重ループが不要な再帰式です。並び方が重要でしたら、内部の式の加工で対応できます。{ 1,1 ; 2,2 ; 2,1 ; 3,3 ; 3,2 ; 3,1 } という2重数列を作り、それを加工して文字列を切り出しています。
Let(
[
$txt = text ;
$len = Length ( $txt ) ;
$row = ( $len ^ 2 + $len ) / 2 ;
$i = 0 ;
$res = "" ;
$eva =
"Case (
$i = $row ; $res ;
Let(
[
$i = $i + 1 ;
$l = Int ( Sqrt ( 2 * $i - 1.75 ) + .5 ) ;
$p = ( $l ^ 2 + $l ) / 2 - $i + 1 ;
$res = List ( $res ; Middle ( $txt ; $p ; $len + 1 - $l ) )
] ;
Evaluate ( $eva )
)
)"
] ;
Evaluate ( $eva )
)Last edited by Shin (2021-03-26 17:48:28)
Offline
Shinさん
数年前にも別の質問でご回答頂いたことを記憶しております。
今回もありがとうございます。
2重ループしなくても達成できるのですね。
こちらも計算式を解析してみたいと思います。
リレーションで部分一致の照合をしたいのでしょうかネ
部分一致 リレーション
でここを探すと他の方法も有りますよ。
Offline
チポさん
ありがとうございます。
>リレーションで部分一致の照合をしたいのでしょうかネ
>部分一致 リレーション
>でここを探すと他の方法も有りますよ。
達成したいことはその通りでございます。
ずっと「テキスト バラバラ、分解」などで
検索しておりました。苦笑
他の方法もチェックしてみたいと思います。
Pages: 1
[ Generated in 0.008 seconds, 8 queries executed - Memory usage: 567.64 KiB (Peak: 572.52 KiB) ]