初心者のFileMaker pro Q&A

みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。

1.ファイルメーカーで解らない事があればここで質問して下さい。

何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)

ログインしていません。

アナウンス

#1 2019-04-24 14:40:24

初心者りとらい
ゲストユーザー

[解決] スクリプト内でのLoopについて教えて下さい。

Win10でFileMaker Pro 14を使っています。

元データ[テキストフィールド]として値一覧形式の下記が入力されており、

[元データ]
1980
ZZZ
AAA

文字表現を指定する為、文字幅[テキストフィールド]としてチェックリスト形式で下記フィールドがあり、

[文字幅]
□半角
□全角

上記の元データを文字幅で指定した結果を反映した下記の結果[テキストフィールド]があるとします。

[結果]
文字幅で指定された形式での元データの結果を表示。
結果の例として下記を期待します。


[例1、文字幅の指定なし]=元データの値をそのまま表示
1980
ZZZ
AAA

[例2、文字幅を半角で指定]=元データの値を半角変換
1980
ZZZ
AAA

[例3、文字幅を全角で指定]=元データの値を全角変換
1980
ZZZ
AAA

[例4、文字幅を半角と全角で指定]=元データの値を半角と全角で変換
1980
1980
ZZZ
ZZZ
AAA
AAA

さて、お教え頂きたいのは
例4の時、元データの1行目を文字幅で変換し、次に元データの2行目を変換し、
以降は元データの最終行まで繰り返すという動作をスクリプトで作成したいのですが・・・まず作成が出来ませんでした・・
行数をカウントする時にカウントしているのは、変換した値を含んだ行数なのでしょうか・・
失念している事が多く、過去のLoopの所も読んだのですが、お教え頂きたいです。

#2 2019-04-24 18:00:41

チポ
メンバー

Re: [解決] スクリプト内でのLoopについて教えて下さい。

> [元データ]
> 1980
> ZZZ
> AAA

これは3レコードですか?

とすると、
> 1980
1980
> ZZZ
> ZZZ
> AAA
> AAA

これはどう考えればいいのですか?

オフライン

#3 2019-04-24 21:15:00

Hiro
メンバー

Re: [解決] スクリプト内でのLoopについて教えて下さい。

面倒なLoopスクリプトでなく、ループ計算式単独で一発算出する式の提案、・・・
(※ただし、処理リストの総行数は大凡200行程度までとする。)

Let([
   $txt=テキストフィールド;
   $flg=   //← 選択枝(0~3)を定義(ナシ=0, 半角=1, 全角=2, 半全角=3)
      PatternCount(文字幅フィールド; "半")*1 + PatternCount(文字幅フィールド; "全")*2;
   $i=0;
   $res="";
   $SUB=   //← サブ関数を定義(選択値別字幅変換する関数)
      "Choose($flg
         ; $itm
         ; RomanHankaku($itm)
         ; RomanZenkaku($itm)
         ; List(RomanHankaku($itm); RomanZenkaku($itm))
      )";
   $FNC=   //← ループ関数を定義(1行づつ切り出して変換処理するループ再帰関数)
      "Case($i=ValueCount($txt); $res;
         Let([
            $i=$i+1;
            $itm=GetValue($txt; $i);
            $res=List($res; Evaluate($SUB))
         ]; Evaluate($FNC))
      )"
];
   Evaluate($FNC)   //← 定義関数$FNCの実行
)

編集者 Hiro (2019-04-26 21:33:28)

オフライン

#4 2019-04-25 18:22:23

初心者りとらい
ゲストユーザー

Re: [解決] スクリプト内でのLoopについて教えて下さい。

返答順にて

チポ様、これはレコードではなくフィールド名が元データというテキストタイプのフィールドです。ちなみに、フィールド名が文字幅というテキストタイプのフィールドについては入力時のコントロールスタイルはチェックボックスセットで値一覧には半角と全角としていてボックスにチェックを入れられるようにしています。

Hiro様、意図をご理解頂いた上、ご提案頂きありがとうございます。
結果フィールドを計算にして試してみます。
小生、Evaluate関数が苦手かつ、スクリプトでのLoop関数が良くわからないので・・・先ずはEvaluate関数につき、調べてみます。
後日、疑問点をお伺いしたく希望します。

取り急ぎご返答まで

#5 2019-04-26 10:03:45

チポ
メンバー

Re: [解決] スクリプト内でのLoopについて教えて下さい。

了解です

> 行数をカウントする時にカウントしているのは、変換した値を含んだ行数なのでしょうか
Loopで行を移動している時のことですよね。
変換前後に関係なく、現在の行を数えますね。

ですから、
変換後の現在の行が、フィールドの行数と同じならLoopを抜ければいいでしょう。

オフライン

#6 2019-04-26 11:37:26

Shin
メンバー

Re: [解決] スクリプト内でのLoopについて教えて下さい。

スクリプトで作るなら、このような事でしょうね。
https://www.dropbox.com/s/u5z9qwpdqfjyb … 2.zip?dl=0

変数を設定 [ $n; 値:ValueCount ( テーブル::元データ ) ]
変数を設定 [ $t; 値:Evaluate ( Substitute ( テーブル::文字幅 ; ¶ ; "+" ) ) + 0 ]
フィールド設定 [ テーブル::返還後データ; "" ]
Loop
	フィールド設定 [
		テーブル::返還後データ;
		Let (
			tar = GetValue ( テーブル::元データ ; $n ) ;
			Choose (
				$t ;
				List ( tar ; テーブル::返還後データ ) ;
				List ( RomanHankaku ( tar ) ; テーブル::返還後データ ) ;
				List ( RomanZenkaku ( tar ) ; テーブル::返還後データ ) ;
				List ( RomanHankaku ( tar ) ; RomanZenkaku ( tar ) ; テーブル::返還後データ )
			)
		) ]
	Exit Loop If [ 
		Let (
		$n = $n - 1 ;
		not $n
	) ]
End Loop

編集者 Shin (2019-04-26 11:43:43)

オフライン

#7 2019-05-07 21:03:51

初心者りとらい
ゲストユーザー

Re: [解決] スクリプト内でのLoopについて教えて下さい。

チポ様 返答ありがとうございます。正直な所、イメージがわきません。
但し、Hiro様のご回答より、元データの値一覧からGetValue関数で文字列を取り出しているようだと検証の結果から類推しております。
shin様、スクリプトありがとうございます。一見して何故このスクリプトになるのかが理解できないので、検証にお時間頂きたいです。
Hiro様、自分なりに考えて、理解してみました。そして、色々と試してみまして、文字幅だけでなく文字高さ(小文字、大文字)も追加して作成してみています。
やってみて多分ですが、   $SUB=””の中でカスタム関数は使えないように思いました。動作がおかしくなってしまったからです。この考え方で合っていますでしょうか?
また、データの値も結果に含みたく思いました。現在は下記のようになる為にどうしたら良いか試している所です。
[元データ]
日本
にっぽん
にほん
Japan
[結果]文字高さ(小文字【※小書き文字を含める】・大文字)、文字幅(半角・全角)を選択した場合
日本   ←元データの1行目
にっぽん ←元データの2行目
ニッポン  ←小文字半角変換による値
ニッポン ←小文字全角変換による値
ニツポン  ←大文字半角変換による値
ニツポン ←大文字半角変換による値
にほん  ←元データの3行目
ニㇹン  ←小文字全角変換による値
ニホン   ←大文字半角変換による値
ニホン  ←大文字全角変換による値
Japan  ←元データの4行目
japan  ←小文字半角変換による値
japan ←小文字全角変換による値
JAPAN   ←大文字半角変換による値
JAPAN ←大文字全角変換による値
まだ、途中なのですが・・下記の課題が未解決なので・・
・平仮名に半角・全角の種類はないので、選択した時点で片仮名に変換して反映したい。但し、幅の指定が無い場合は、小文字に該当する小書き文字を適用する。
・選択を反映した結果がずらっと並んだもので重複値を1個にまとめるのにどうしたら良いかが分かりません。

もう少しで課題の1つ目はクリアできそうなので・・出来たら書き込みますのでお知恵を拝借したく先にお願い申し上げます。

#8 2019-05-07 23:07:46

Hiro
メンバー

Re: [解決] スクリプト内でのLoopについて教えて下さい。

また 過去ログ id=8970『値一覧内の重複削除と文字種変換のスクリプトを教えて下さい。』の同じ問いを繰り返すのでしょうか?

オフライン

#9 2019-05-14 19:36:22

初心者りとらい
ゲストユーザー

Re: [解決] スクリプト内でのLoopについて教えて下さい。

Hiro様
類似点はございましょうが動作が異なります。
異なる結果になるので新たに質問をさせて頂いた次第です。
もちろん類似点はありますが、今回、文字高さと文字幅の2つを始めから定義しなかったのは質問の表題に有りますようにスクリプト内でのLoopの動作に関して私としては不明な点が多々あり、ここを理解しないと同じ質問を繰り返すことになってしまうからです。
前回に続きループ計算式単独で一発算出する式の提案を頂いていることからスクリプトにしない方が良い様だと類推しております。
今回は、前回のご回答に関し何回も見直し考えてみての質問とご理解頂ければ幸いです。
尚、未熟ゆえ理解の及ばない所も多々ある事をご容赦下さい。

何とか変換に関しては式を立ててみましたのでご確認頂けると幸いです。
Let([
   $txt=元データ;
   $flg1=PatternCount(文字高さ; "小")*1 + PatternCount(文字高さ; "大")*2;   //← 選択値(0~3)を定義(ナシ=0, 小文字=1, 大文字=2, 小+大文字=3)
   $flg2=PatternCount(文字幅; "半")*1 + PatternCount(文字幅; "全")*2;   //← 選択値(0~3)を定義(ナシ=0, 半角=1, 全角=2, 半+全角=3)
   $無半="RomanHankaku(KanaHankaku(Substitute(Katakana($itm); [\"カ゚\";\"カ゚\"]; [\"キ゚\";\"キ゚\"]; [\"ク゚\";\"ク゚\"]; [\"ケ゚\";\"ケ゚\"]; [\"コ゚\";\"コ゚\"]; [\"セ゚\";\"セ゚\"]; [\"ツ゚\";\"ツ゚\"]; [\"ト゚\";\"ト゚\"]; [\"ヷ\";\"ヷ\"]; [\"ヸ\";\"ヸ\"]; [\"ヴ\";\"ヴ\"]; [\"ヹ\";\"ヹ\"]; [\"ヺ\";\"ヺ\"])))";
   $無全="RomanZenkaku(KanaZenkaku(Katakana($itm)))";
   $小無="Substitute(Lower($itm);[\"わ゙\";\"◆➀\"];[\"か゚\";\"◇➀\"];[\"け゚\";\"◇➁\"];[\"つ゚\";\"◇➂\"];[\"あ\";\"ぁ\"];[\"い\";\"ぃ\"];[\"う\";\"ぅ\"];[\"え\";\"ぇ\"];[\"お\";\"ぉ\"];[\"か\";\"ゕ\"];[\"け\";\"ゖ\"];[\"つ\";\"っ\"];[\"や\";\"ゃ\"];[\"ゆ\";\"ゅ\"];[\"よ\";\"ょ\"];[\"わ\";\"ゎ\"];[\"ヅ\";\"◆➁\"];[\"ヴ\";\"◆➂\"];[\"ツ゚\";\"◇➃\"];[\"ア\";\"ァ\"];[\"イ\";\"ィ\"];[\"ウ\";\"ゥ\"];[\"エ\";\"ェ\"];[\"オ\";\"ォ\"];[\"ツ\";\"ッ\"];[\"ヤ\";\"ャ\"];[\"ユ\";\"ュ\"];[\"ヨ\";\"ョ\"];[\"ヷ\";\"◆➃\"];[\"カ゚\";\"◇➄\"];[\"ク゚\";\"◇➅\"];[\"ケ゚\";\"◇➆\"];[\"ツ゚\";\"◇➇\"];[\"ト゚\";\"◇➈\"];[\"プ\";\"◇➉\"];[\"プ\";\"ㇷ゚\"];[\"ア\";\"ァ\"];[\"イ\";\"ィ\"];[\"ウ\";\"ゥ\"];[\"エ\";\"ェ\"];[\"オ\";\"ォ\"];[\"カ\";\"ヵ\"];[\"ク\";\"ㇰ\"];[\"ケ\";\"ヶ\"];[\"シ\";\"ㇱ\"];[\"ス\";\"ㇲ\"];[\"ツ\";\"ッ\"];[\"ト\";\"ㇳ\"];[\"ヌ\";\"ㇴ\"];[\"ハ\";\"ㇵ\"];[\"ヒ\";\"ㇶ\"];[\"フ\";\"ㇷ\"];[\"ヘ\";\"ㇸ\"];[\"ホ\";\"ㇹ\"];[\"ム\";\"ㇺ\"];[\"ヤ\";\"ャ\"];[\"ユ\";\"ュ\"];[\"ヨ\";\"ョ\"];[\"ラ\";\"ㇻ\"];[\"リ\";\"ㇼ\"];[\"ル\";\"ㇽ\"];[\"レ\";\"ㇾ\"];[\"ロ\";\"ㇿ\"];[\"◆➀\";\"わ゙\"];[\"◇➀\";\"か゚\"];[\"◇➁\";\"け゚\"];[\"◇➂\";\"つ゚\"];[\"◆➁\";\"ヅ\"];[\"◆➂\";\"ヴ\"];[\"◇➃\";\"ツ゚\"];[\"◆➃\";\"ヷ\"];[\"◇➄\";\"カ゚\"];[\"◇➅\";\"ク゚\"];[\"◇➆\";\"ケ゚\"];[\"◇➇\";\"ツ゚\"];[\"◇➈\";\"ト゚\"];[\"◇➉\";\"プ\"])";
   $小半="Substitute(KanaHankaku(Substitute(Katakana(RomanHankaku(Lower($itm)));[\"ヷ\";\"ヷ\"];[\"ヺ\";\"ヺ\"];[\"カ゚\";\"カ゚\"];[\"キ゚\";\"キ゚\"];[\"ク゚\";\"ク゚\"];[\"ケ゚\";\"ケ゚\"];[\"コ゚\";\"コ゚\"];[\"セ゚\";\"セ゚\"];[\"ツ゚\";\"ツ゚\"];[\"ト゚\";\"ト゚\"]));[\"ヅ\";\"◇➀\"];[\"ヷ\";\"◇➁\"];[\"ヴ\";\"◇➂\"];[\"ヺ\";\"◇➃\"];[\"ツ゚\";\"◆➀\"];[\"ア\";\"ァ\"];[\"イ\";\"ィ\"];[\"ウ\";\"ゥ\"];[\"エ\";\"ェ\"];[\"オ\";\"ォ\"];[\"ツ\";\"ッ\"];[\"ヤ\";\"ャ\"];[\"ユ\";\"ュ\"];[\"ヨ\";\"ョ\"];[\"ㇷ゚\";\"プ\"];[\"ヵ\";\"カ\"];[\"ㇰ\";\"ク\"];[\"ヶ\";\"ケ\"];[\"ㇱ\";\"シ\"];[\"ㇲ\";\"ス\"];[\"ㇳ\";\"ト\"];[\"ㇴ\";\"ヌ\"];[\"ㇵ\";\"ハ\"];[\"ㇶ\";\"ヒ\"];[\"ㇷ\";\"フ\"];[\"ㇸ\";\"ヘ\"];[\"ㇹ\";\"ホ\"];[\"ㇺ\";\"ム\"];[\"ㇻ\";\"ラ\"];[\"ㇼ\";\"リ\"];[\"ㇽ\";\"ル\"];[\"ㇾ\";\"レ\"];[\"ㇿ\";\"ロ\"];[\"ヮ\";\"ワ\"];[\"◇➀\";\"ヅ\"];[\"◇➁\";\"ヷ\"];[\"◇➂\";\"ヴ\"];[\"◇➃\";\"ヺ\"];[\"◆➀\";\"ツ゚\"])";
   $小全="Substitute(KanaZenkaku(Substitute(Katakana(RomanZenkaku(Lower($itm)));[\"カ゚\";\"カ゚\"];[\"キ゚\";\"キ゚\"];[\"ク゚\";\"ク゚\"];[\"ケ゚\";\"ケ゚\"];[\"コ゚\";\"コ゚\"];[\"セ゚\";\"セ゚\"];[\"ツ゚\";\"ツ゚\"];[\"ト゚\";\"ト゚\"]));[\"ヷ\";\"◇➀\"];[\"カ゚\";\"◆➀\"];[\"ク゚\";\"◆➁\"];[\"ケ゚\";\"◆➂\"];[\"ツ゚\";\"◆➃\"];[\"ト゚\";\"◆➄\"];[\"プ\";\"ㇷ゚\"]
;[\"ア\";\"ァ\"];[\"イ\";\"ィ\"];[\"ウ\";\"ゥ\"];[\"エ\";\"ェ\"];[\"オ\";\"ォ\"];[\"カ\";\"ヵ\"];[\"ク\";\"ㇰ\"];[\"ケ\";\"ヶ\"];[\"シ\";\"ㇱ\"];[\"ス\";\"ㇲ\"];[\"ツ\";\"ッ\"];[\"ト\";\"ㇳ\"];[\"ヌ\";\"ㇴ\"];[\"ハ\";\"ㇵ\"];[\"ヒ\";\"ㇶ\"];[\"フ\";\"ㇷ\"];[\"ヘ\";\"ㇸ\"];[\"ホ\";\"ㇹ\"];[\"ム\";\"ㇺ\"];[\"ヤ\";\"ャ\"];[\"ユ\";\"ュ\"];[\"ヨ\";\"ョ\"];[\"ラ\";\"ㇻ\"];[\"リ\";\"ㇼ\"];[\"ル\";\"ㇽ\"];[\"レ\";\"ㇾ\"];[\"ロ\";\"ㇿ\"];[\"ワ\";\"ヮ\"];[\"◇➀\";\"ヷ\"];[\"◆➀\";\"カ゚\"];[\"◆➁\";\"ク゚\"];[\"◆➂\";\"ケ゚\"];[\"◆➃\";\"ツ゚\"];[\"◆➄\";\"ト゚\"])";
   $大無="Substitute(Upper($itm);[\"ぁ\";\"あ\"];[\"ぃ\";\"い\"];[\"ぅ\";\"う\"];[\"ぇ\";\"え\"];[\"ぉ\";\"お\"];[\"ゕ\";\"か\"];[\"ゖ\";\"け\"];[\"っ\";\"つ\"];[\"ゃ\";\"や\"];[\"ゅ\";\"ゆ\"];[\"ょ\";\"よ\"]; [\"ゎ\";\"わ\"]; [\"ァ\";\"ア\"]; [\"ィ\";\"イ\"]; [\"ゥ\";\"ウ\"]; [\"ェ\";\"エ\"]; [\"ォ\";\"オ\"]; [\"ッ\";\"ツ\"];[\"ャ\";\"ヤ\"];[\"ュ\";\"ユ\"];[\"ョ\";\"ヨ\"];[\"ㇷ゚\";\"プ\"];[\"ァ\";\"ア\"];[\"ィ\";\"イ\"];[\"ゥ\";\"ウ\"];[\"ェ\";\"エ\"];[\"ォ\";\"オ\"];[\"ヵ\";\"カ\"];[\"ㇰ\";\"ク\"];[\"ヶ\";\"ケ\"];[\"ㇱ\";\"シ\"];[\"ㇲ\";\"ス\"];[\"ッ\";\"ツ\"];[\"ㇳ\";\"ト\"];[\"ㇴ\";\"ヌ\"];[\"ㇵ\";\"ハ\"];[\"ㇶ\";\"ヒ\"];[\"ㇷ\";\"フ\"];[\"ㇸ\";\"ヘ\"];[\"ㇹ\";\"ホ\"];[\"ㇺ\";\"ム\"];[\"ャ\";\"ヤ\"];[\"ュ\";\"ユ\"];[\"ョ\";\"ヨ\"];[\"ㇻ\";\"ラ\"];[\"ㇼ\";\"リ\"];[\"ㇽ\";\"ル\"];[\"ㇾ\";\"レ\"];[\"ㇿ\";\"ロ\"];[\"ヮ\";\"ワ\"])";
   $大半="Substitute(KanaHankaku(Substitute(Katakana(RomanHankaku(Upper($itm)));[\"ヷ\";\"ヷ\"];[\"ヺ\";\"ヺ\"];[\"カ゚\";\"カ゚\"];[\"キ゚\";\"キ゚\"];[\"ク゚\";\"ク゚\"];[\"ケ゚\";\"ケ゚\"];[\"コ゚\";\"コ゚\"];[\"セ゚\";\"セ゚\"];[\"ツ゚\";\"ツ゚\"];[\"ト゚\";\"ト゚\"]));[\"ァ\";\"ア\"];[\"ィ\";\"イ\"];[\"ゥ\";\"ウ\"];[\"ェ\";\"エ\"];[\"ォ\";\"オ\"];[\"ッ\";\"ツ\"];[\"ャ\";\"ヤ\"];[\"ュ\";\"ユ\"];[\"ョ\";\"ヨ\"];[\"ㇷ゚\";\"プ\"];[\"ヵ\";\"カ\"];[\"ㇰ\";\"ク\"];[\"ヶ\";\"ケ\"];[\"ㇱ\";\"シ\"];[\"ㇲ\";\"ス\"];[\"ㇳ\";\"ト\"];[\"ㇴ\";\"ヌ\"];[\"ㇵ\";\"ハ\"];[\"ㇶ\";\"ヒ\"];[\"ㇷ\";\"フ\"];[\"ㇸ\";\"ヘ\"];[\"ㇹ\";\"ホ\"];[\"ㇺ\";\"ム\"];[\"ㇻ\";\"ラ\"];[\"ㇼ\";\"リ\"];[\"ㇽ\";\"ル\"];[\"ㇾ\";\"レ\"];[\"ㇿ\";\"ロ\"];[\"ヮ\";\"ワ\"])";
   $大全="Substitute(KanaZenkaku(Substitute(Katakana(RomanZenkaku(Upper($itm)));[\"カ゚\";\"カ゚\"];[\"キ゚\";\"キ゚\"];[\"ク゚\";\"ク゚\"];[\"ケ゚\";\"ケ゚\"];[\"コ゚\";\"コ゚\"];[\"セ゚\";\"セ゚\"];[\"ツ゚\";\"ツ゚\"];[\"ト゚\";\"ト゚\"]));[\"ㇷ゚\";\"プ\"];[\"ァ\";\"ア\"];[\"ィ\";\"イ\"];[\"ゥ\";\"ウ\"];[\"ェ\";\"エ\"];[\"ォ\";\"オ\"];[\"ヵ\";\"カ\"];[\"ㇰ\";\"ク\"];[\"ヶ\";\"ケ\"];[\"ㇱ\";\"シ\"];[\"ㇲ\";\"ス\"];[\"ッ\";\"ツ\"];[\"ㇳ\";\"ト\"];[\"ㇴ\";\"ヌ\"];[\"ㇵ\";\"ハ\"];[\"ㇶ\";\"ヒ\"];[\"ㇷ\";\"フ\"];[\"ㇸ\";\"ヘ\"];[\"ㇹ\";\"ホ\"];[\"ㇺ\";\"ム\"];[\"ャ\";\"ヤ\"];[\"ュ\";\"ユ\"];[\"ョ\";\"ヨ\"];[\"ㇻ\";\"ラ\"];[\"ㇼ\";\"リ\"];[\"ㇽ\";\"ル\"];[\"ㇾ\";\"レ\"];[\"ㇿ\";\"ロ\"];[\"ヮ\";\"ワ\"])";
   $➀i=0;
   $➀res="";
   $➀SUB=   //← サブ関数を定義(選択値別字高幅変換する関数)
      "List (
         Case (IsEmpty ($➀itm);\"\";$➀itm);
         Case ($flg1=0 and ($flg2=1 or $flg2=3);Evaluate($無半);\"\");
         Case ($flg1=0 and ($flg2=2 or $flg2=3);Evaluate($無全);\"\");
         Case (($flg1=1 or $flg1=3) and $flg2=0;Evaluate($小無);\"\");
         Case (($flg1=1 or $flg1=3) and ($flg2=1 or $flg2=3);Evaluate($小半);\"\");
         Case (($flg1=1 or $flg1=3) and ($flg2=2 or $flg2=3);Evaluate($小全);\"\");
         Case (($flg1=2 or $flg1=3) and $flg2=0;Evaluate($大無);\"\");
         Case (($flg1=2 or $flg1=3) and ($flg2=1 or $flg2=3);Evaluate($大半);\"\");
         Case (($flg1=2 or $flg1=3) and ($flg2=2 or $flg2=3);Evaluate($大全);\"\")
         )";
   $➀FNC=   //← ループ関数を定義(1行づつ切り出して変換処理するループ再帰関数)
      "Case($➀i=ValueCount($txt); $➀res;
         Let([
            $➀i=$➀i+1;
            $➀itm=GetValue($txt; $➀i);
            $➀res=List($➀res; Evaluate($➀SUB))
         ]; Evaluate($➀FNC))
      )"
※➁整理する式が繋がるはず・・・
];
   Evaluate($➀FNC)   //上記定義関数式$FNCを計算実行する ←Evaluate(※➁の結果の$FNC)みたなのになるはず)
)

コピー&ペーストしたら/の逆の記号が¥に変換されてしまいました。そして/の逆の記号の入力ができないので置換えてお考え下さい。
上記により、
・平仮名は文字幅を指定した時は片仮名変換し、文字高さと文字幅を指定した時に小文字で該当する文字が無い場合は、まず大文字とし、該当幅の大文字も無い場合は大文字全角の文字を表示しています。
・取り出した変換元も結果に含んでいます。
上記の式の結果で重複箇所がたくさん出来るのですが・・・それを正確に整理する為にExact関数を用いることは判るのですが、どうしたら良いでしょうか
指定行目を取り出して、指定行までの値一覧で重複している場合は削除したい場合は
〇リストはEvaluate($➀FNC)で良いはず。←$➁listとしてみます
〇$➁i=0;
〇$➁res="";
〇$➁SUB="この中の式がわからないです。GetValue($➁list; $➁i)で行を取り出し、$➁listの1行目から最終行までをExact関数で比較して回数をカウントして1回だけなら表示、2回以上は無しという式のはず"
〇$➁??=$➁SUBの値のList関数でリスト化した値
の様な感じの式と思うのですが・・・分かりません。
次に式をドッキングしたものはどうすれば良いのか書き方が分からないです。
考え方がそもそも間違っているかもしれないですが、正解はどうしたら良いでしょうか?

#10 2019-05-15 00:50:43

Hiro
メンバー

Re: [解決] スクリプト内でのLoopについて教えて下さい。

>#9 『何とか変換に関しては式を立ててみましたのでご確認頂けると幸いです。』
   おぉ、素晴らしい。最後までよく頑張り抜きましたネ。^^)

校正箇所はほんの少しです。(赤字で明示)
・Substitute置換え順を適正化しました。(順が違っていて、意図した結果が得られなかった)
   ※置換内容の正誤については、変換意向を知りませんので、精査しておりません。
・重複を排除する関数$UNQを追加して、ユニーク値だけのリストを返します。(元データ自体の重複も排除する仕様です。)
・見掛けで気付いた所を少しだけ見易くブラシアップしました。


Let([
   $txt=元データ;
   $flg1=   //← 選択値(0~3)を定義(ナシ=0, 小文字=1, 大文字=2, 小+大文字=3)
      PatternCount(文字高さ; "小")*1 + PatternCount(文字高さ; "大")*2;
   $flg2=   //← 選択値(0~3)を定義(ナシ=0, 半角=1, 全角=2, 半+全角=3)
      PatternCount(文字幅; "半")*1 + PatternCount(文字幅; "全")*2;
   $無半=
      "RomanHankaku(KanaHankaku(
         Substitute(Katakana($itm)
         ;[""カ゚"";""カ゚""];[""キ゚"";""キ゚""];[""ク゚"";""ク゚""];[""ケ゚"";""ケ゚""];[""コ゚"";""コ゚""];[""セ゚"";""セ゚""];[""ツ゚"";""ツ゚""];[""ト゚"";""ト゚""];[""ヷ"";""ヷ""];[""ヸ"";""ヸ""];[""ヴ"";""ヴ""];[""ヹ"";""ヹ""];[""ヺ"";""ヺ""])
         )
      )";
   $無全=
      "RomanZenkaku(KanaZenkaku(Katakana($itm)))";
   $小無=
      "Substitute(Lower($itm)
      ;[""わ゙"";""◆""];[""か゚"";""◇""];[""け゚"";""◇➁""];[""つ゚"";""◇➂""];[""あ"";""ぁ""];[""い"";""ぃ""];[""う"";""ぅ""];[""え"";""ぇ""];[""お"";""ぉ""];[""か"";""ゕ""];[""け"";""ゖ""];[""つ"";""っ""];[""や"";""ゃ""];[""ゆ"";""ゅ""];[""よ"";""ょ""];[""わ"";""ゎ""]
      ;[""ヅ"";""◆➁""];[""ヴ"";""◆➂""];[""ツ゚"";""◇➃""];[""ア"";""ァ""];[""イ"";""ィ""];[""ウ"";""ゥ""];[""エ"";""ェ""];[""オ"";""ォ""];[""ツ"";""ッ""];[""ヤ"";""ャ""];[""ユ"";""ュ""];[""ヨ"";""ョ""];[""ヷ"";""◆➃""];[""カ゚"";""◇➄""];[""ク゚"";""◇➅""];[""ケ゚"";""◇➆""];[""ツ゚"";""◇➇""];[""ト゚"";""◇➈""];[""プ"";""◇➉""];[""プ"";""ㇷ゚""];[""ア"";""ァ""];[""イ"";""ィ""];[""ウ"";""ゥ""];[""エ"";""ェ""];[""オ"";""ォ""];[""カ"";""ヵ""];[""ク"";""ㇰ""];[""ケ"";""ヶ""];[""シ"";""ㇱ""];[""ス"";""ㇲ""];[""ツ"";""ッ""];[""ト"";""ㇳ""];[""ヌ"";""ㇴ""];[""ハ"";""ㇵ""];[""ヒ"";""ㇶ""];[""フ"";""ㇷ""];[""ヘ"";""ㇸ""];[""ホ"";""ㇹ""];[""ム"";""ㇺ""];[""ヤ"";""ャ""];[""ユ"";""ュ""];[""ヨ"";""ョ""];[""ラ"";""ㇻ""];[""リ"";""ㇼ""];[""ル"";""ㇽ""];[""レ"";""ㇾ""];[""ロ"";""ㇿ""]
      ;[""◇➁"";""け゚""];[""◇➂"";""つ゚""];[""◆➁"";""ヅ""];[""◆➂"";""ヴ""];[""◇➃"";""ツ゚""];[""◆➃"";""ヷ""];[""◇➄"";""カ゚""];[""◇➅"";""ク゚""];[""◇➆"";""ケ゚""];[""◇➇"";""ツ゚""];[""◇➈"";""ト゚""];[""◇➉"";""プ""];[""◆"";""わ゙""];[""◇"";""か゚""]
      )";
   $小半=
      "Substitute(KanaHankaku(
         Substitute(Katakana(RomanHankaku(Lower($itm)))
         ;[""ヷ"";""ヷ""];[""ヺ"";""ヺ""];[""カ゚"";""カ゚""];[""キ゚"";""キ゚""];[""ク゚"";""ク゚""];[""ケ゚"";""ケ゚""];[""コ゚"";""コ゚""];[""セ゚"";""セ゚""];[""ツ゚"";""ツ゚""];[""ト゚"";""ト゚""])
         )
      ;[""ヅ"";""◇""];[""ヷ"";""◇➁""];[""ヴ"";""◇➂""];[""ヺ"";""◇➃""];[""ツ゚"";""◆""];[""ア"";""ァ""];[""イ"";""ィ""];[""ウ"";""ゥ""];[""エ"";""ェ""];[""オ"";""ォ""];[""ツ"";""ッ""];[""ヤ"";""ャ""];[""ユ"";""ュ""];[""ヨ"";""ョ""];[""ㇷ゚"";""プ""];[""ヵ"";""カ""];[""ㇰ"";""ク""];[""ヶ"";""ケ""];[""ㇱ"";""シ""];[""ㇲ"";""ス""];[""ㇳ"";""ト""];[""ㇴ"";""ヌ""];[""ㇵ"";""ハ""];[""ㇶ"";""ヒ""];[""ㇷ"";""フ""];[""ㇸ"";""ヘ""];[""ㇹ"";""ホ""];[""ㇺ"";""ム""];[""ㇻ"";""ラ""];[""ㇼ"";""リ""];[""ㇽ"";""ル""];[""ㇾ"";""レ""];[""ㇿ"";""ロ""];[""ヮ"";""ワ""]
      ;[""◇➁"";""ヷ""];[""◇➂"";""ヴ""];[""◇➃"";""ヺ""];[""◇"";""ヅ""];[""◆"";""ツ゚""]
      )";
   $小全=
      "Substitute(KanaZenkaku(
         Substitute(Katakana(RomanZenkaku(Lower($itm)))
         ;[""カ゚"";""カ゚""];[""キ゚"";""キ゚""];[""ク゚"";""ク゚""];[""ケ゚"";""ケ゚""];[""コ゚"";""コ゚""];[""セ゚"";""セ゚""];[""ツ゚"";""ツ゚""];[""ト゚"";""ト゚""])
         )
      ;[""ヷ"";""◇""];[""カ゚"";""◆""];[""ク゚"";""◆➁""];[""ケ゚"";""◆➂""];[""ツ゚"";""◆➃""];[""ト゚"";""◆➄""];[""プ"";""ㇷ゚""]
;[""ア"";""ァ""];[""イ"";""ィ""];[""ウ"";""ゥ""];[""エ"";""ェ""];[""オ"";""ォ""];[""カ"";""ヵ""];[""ク"";""ㇰ""];[""ケ"";""ヶ""];[""シ"";""ㇱ""];[""ス"";""ㇲ""];[""ツ"";""ッ""];[""ト"";""ㇳ""];[""ヌ"";""ㇴ""];[""ハ"";""ㇵ""];[""ヒ"";""ㇶ""];[""フ"";""ㇷ""];[""ヘ"";""ㇸ""];[""ホ"";""ㇹ""];[""ム"";""ㇺ""];[""ヤ"";""ャ""];[""ユ"";""ュ""];[""ヨ"";""ョ""];[""ラ"";""ㇻ""];[""リ"";""ㇼ""];[""ル"";""ㇽ""];[""レ"";""ㇾ""];[""ロ"";""ㇿ""];[""ワ"";""ヮ""]
      ;[""◆➁"";""ク゚""];[""◆➂"";""ケ゚""];[""◆➃"";""ツ゚""];[""◆➄"";""ト゚""];[""◇"";""ヷ""];[""◆"";""カ゚""]
      )";
   $大無=
      "Substitute(Upper($itm)
      ;[""ぁ"";""あ""];[""ぃ"";""い""];[""ぅ"";""う""];[""ぇ"";""え""];[""ぉ"";""お""];[""ゕ"";""か""];[""ゖ"";""け""];[""っ"";""つ""];[""ゃ"";""や""];[""ゅ"";""ゆ""];[""ょ"";""よ""];[""ゎ"";""わ""]
      ;[""ァ"";""ア""];[""ィ"";""イ""];[""ゥ"";""ウ""];[""ェ"";""エ""];[""ォ"";""オ""];[""ッ"";""ツ""];[""ャ"";""ヤ""];[""ュ"";""ユ""];[""ョ"";""ヨ""];[""ㇷ゚"";""プ""];[""ァ"";""ア""];[""ィ"";""イ""];[""ゥ"";""ウ""];[""ェ"";""エ""];[""ォ"";""オ""];[""ヵ"";""カ""];[""ㇰ"";""ク""];[""ヶ"";""ケ""];[""ㇱ"";""シ""];[""ㇲ"";""ス""];[""ッ"";""ツ""];[""ㇳ"";""ト""];[""ㇴ"";""ヌ""];[""ㇵ"";""ハ""];[""ㇶ"";""ヒ""];[""ㇷ"";""フ""];[""ㇸ"";""ヘ""];[""ㇹ"";""ホ""];[""ㇺ"";""ム""];[""ャ"";""ヤ""];[""ュ"";""ユ""];[""ョ"";""ヨ""];[""ㇻ"";""ラ""];[""ㇼ"";""リ""];[""ㇽ"";""ル""];[""ㇾ"";""レ""];[""ㇿ"";""ロ""];[""ヮ"";""ワ""]
      )";
   $大半=
      "Substitute(KanaHankaku(
         Substitute(Katakana(RomanHankaku(Upper($itm)))
         ;[""ヷ"";""ヷ""];[""ヺ"";""ヺ""];[""カ゚"";""カ゚""];[""キ゚"";""キ゚""];[""ク゚"";""ク゚""];[""ケ゚"";""ケ゚""];[""コ゚"";""コ゚""];[""セ゚"";""セ゚""];[""ツ゚"";""ツ゚""];[""ト゚"";""ト゚""])
         )
      ;[""ァ"";""ア""];[""ィ"";""イ""];[""ゥ"";""ウ""];[""ェ"";""エ""];[""ォ"";""オ""];[""ッ"";""ツ""];[""ャ"";""ヤ""];[""ュ"";""ユ""];[""ョ"";""ヨ""];[""ㇷ゚"";""プ""];[""ヵ"";""カ""];[""ㇰ"";""ク""];[""ヶ"";""ケ""];[""ㇱ"";""シ""];[""ㇲ"";""ス""];[""ㇳ"";""ト""];[""ㇴ"";""ヌ""];[""ㇵ"";""ハ""];[""ㇶ"";""ヒ""];[""ㇷ"";""フ""];[""ㇸ"";""ヘ""];[""ㇹ"";""ホ""];[""ㇺ"";""ム""];[""ㇻ"";""ラ""];[""ㇼ"";""リ""];[""ㇽ"";""ル""];[""ㇾ"";""レ""];[""ㇿ"";""ロ""];[""ヮ"";""ワ""]
      )";
   $大全=
      "Substitute(KanaZenkaku(
         Substitute(Katakana(RomanZenkaku(Upper($itm)))
         ;[""カ゚"";""カ゚""];[""キ゚"";""キ゚""];[""ク゚"";""ク゚""];[""ケ゚"";""ケ゚""];[""コ゚"";""コ゚""];[""セ゚"";""セ゚""];[""ツ゚"";""ツ゚""];[""ト゚"";""ト゚""])
         )
      ;[""ㇷ゚"";""プ""];[""ァ"";""ア""];[""ィ"";""イ""];[""ゥ"";""ウ""];[""ェ"";""エ""];[""ォ"";""オ""];[""ヵ"";""カ""];[""ㇰ"";""ク""];[""ヶ"";""ケ""];[""ㇱ"";""シ""];[""ㇲ"";""ス""];[""ッ"";""ツ""];[""ㇳ"";""ト""];[""ㇴ"";""ヌ""];[""ㇵ"";""ハ""];[""ㇶ"";""ヒ""];[""ㇷ"";""フ""];[""ㇸ"";""ヘ""];[""ㇹ"";""ホ""];[""ㇺ"";""ム""];[""ャ"";""ヤ""];[""ュ"";""ユ""];[""ョ"";""ヨ""];[""ㇻ"";""ラ""];[""ㇼ"";""リ""];[""ㇽ"";""ル""];[""ㇾ"";""レ""];[""ㇿ"";""ロ""];[""ヮ"";""ワ""]
      )";
   $UNQ=   //← ※重複削除関数$UNQ を定義
      "Choose(Exact(GetValue(FilterValues($res;$add);1); $add); $add)";
   $SUB=   //← サブ関数を定義(選択値別字高幅変換する関数)
      "List(
         Case($flg1=0 and ($flg2=1 or $flg2=3); Let([$add=Evaluate($無半)]; Evaluate($UNQ)));
         Case($flg1=0 and ($flg2=2 or $flg2=3); Let([$add=Evaluate($無全)]; Evaluate($UNQ)));
         Case(($flg1=1 or $flg1=3) and $flg2=0; Let([$add=Evaluate($小無)]; Evaluate($UNQ)));
         Case(($flg1=1 or $flg1=3) and ($flg2=1 or $flg2=3); Let([$add=Evaluate($小半)]; Evaluate($UNQ)));
         Case(($flg1=1 or $flg1=3) and ($flg2=2 or $flg2=3); Let([$add=Evaluate($小全)]; Evaluate($UNQ)));
         Case(($flg1=2 or $flg1=3) and $flg2=0; Let([$add=Evaluate($大無)]; Evaluate($UNQ)));
         Case(($flg1=2 or $flg1=3) and ($flg2=1 or $flg2=3); Let([$add=Evaluate($大半)]; Evaluate($UNQ)));
         Case(($flg1=2 or $flg1=3) and ($flg2=2 or $flg2=3); Let([$add=Evaluate($大全)]; Evaluate($UNQ)))
      )";
   $i=0;
   $res="";
   $FNC=   //← ループ関数を定義(1行づつ切り出して変換処理するループ再帰関数)
      "Case($i=ValueCount($txt); $res;
         Let([
            $i=$i+1;
            $itm=GetValue($txt; $i);
            $res=List($res;Let([$add=$itm]; Evaluate($UNQ)));
            $res=List($res;  Evaluate($SUB))
         ]; Evaluate($FNC))
      )"
];
   Evaluate($FNC)   //上記定義関数式$FNCを計算実行する
)


【修正履歴】
随時、気が付いたときに、改善修正を補足しています。
以下の最終編集日時から判断して旧式なら最新修正式へ更新ください。

編集者 Hiro (2019-05-16 12:28:52)

オフライン

#11 2019-05-15 15:51:05

初心者りとらい
ゲストユーザー

Re: [解決] スクリプト内でのLoopについて教えて下さい。

Hiro様
早速のお返事ありがとうございます。
褒めて頂けて嬉しいです。あれからずっと前回のも含めて何でなのか考えて、アドバイスを頂いた事を生かして式を捻り出して良かったです。
実はあれから毎日あれこれ試して、自分で式を作っては動かず・・カスタム関数も試したが式に含めると何故かエラーが出たりで・・・何回も作り直してみました。
あれからのあれは4月25日なので・・・ゴールデンウイークを含め凄い時間かかったのですが・・・
さすがはHiro様!昨日書き込んで今日にご返信頂けるとは!いろんな意味で脱帽です。重ねてお礼申し上げます。
さて、作製頂きました中の
$UNQ=※重複削除関数$UNQ を定義の中身については分かるような分からないような・・・式のイメージみたいなのは何となく分かる程度ですのでまた色々作ってみて理解に励みます。
$SUB=← サブ関数を定義(選択値別字高幅変換する関数)の中身については私的に理解に熟考を要する気配がヒシヒシと漂ってますのでお時間下さい。
というのもドッキングしたら$FNCより後に何らかの式が来ると考えていたからです。
そして書き込み頂いたものは文字数や式の長さを含め、凄いまとまってまして・・・今は驚きの方が先に来てまして、直観的な理解に及ばないのです。
ですので今の所、教えて頂かなければならない質問が発生しそうですが何をどう聞いたら良いかが分からないのです。
検証を含めお時間頂きたいです。
取り急ぎお返事まで

#12 2019-05-16 22:25:46

Hiro
メンバー

Re: [解決] スクリプト内でのLoopについて教えて下さい。

>#11『#10 $UNQ=※重複削除関数$UNQ を定義の中身については分かるような分からないような・・・』
#10式中の$UNQ使いが解り難い様なので、
元々#9質問の別途式化による方法も併せて書いておきます。
※この#12分離方式も前#10内包方式も全く同じ結果を算出します。


Let([
   $txt=元データ;
   $flg1=   //← 選択値(0~3)を定義(ナシ=0, 小文字=1, 大文字=2, 小+大文字=3)
      PatternCount(文字高さ; "小")*1 + PatternCount(文字高さ; "大")*2;
   $flg2=   //← 選択値(0~3)を定義(ナシ=0, 半角=1, 全角=2, 半+全角=3)
      PatternCount(文字幅; "半")*1 + PatternCount(文字幅; "全")*2;
   $無半=
      "RomanHankaku(KanaHankaku(
         Substitute(Katakana($itm)
         ;[""カ゚"";""カ゚""];[""キ゚"";""キ゚""];[""ク゚"";""ク゚""];[""ケ゚"";""ケ゚""];[""コ゚"";""コ゚""];[""セ゚"";""セ゚""];[""ツ゚"";""ツ゚""];[""ト゚"";""ト゚""];[""ヷ"";""ヷ""];[""ヸ"";""ヸ""];[""ヴ"";""ヴ""];[""ヹ"";""ヹ""];[""ヺ"";""ヺ""]))
      )";
   $無全=
      "RomanZenkaku(KanaZenkaku(Katakana($itm)))";
   $小無=
      "Substitute(Lower($itm)
      ;[""わ゙"";""◆""];[""か゚"";""◇""];[""け゚"";""◇➁""];[""つ゚"";""◇➂""];[""あ"";""ぁ""];[""い"";""ぃ""];[""う"";""ぅ""];[""え"";""ぇ""];[""お"";""ぉ""];[""か"";""ゕ""];[""け"";""ゖ""];[""つ"";""っ""];[""や"";""ゃ""];[""ゆ"";""ゅ""];[""よ"";""ょ""];[""わ"";""ゎ""]
      ;[""ヅ"";""◆➁""];[""ヴ"";""◆➂""];[""ツ゚"";""◇➃""];[""ア"";""ァ""];[""イ"";""ィ""];[""ウ"";""ゥ""];[""エ"";""ェ""];[""オ"";""ォ""];[""ツ"";""ッ""];[""ヤ"";""ャ""];[""ユ"";""ュ""];[""ヨ"";""ョ""];[""ヷ"";""◆➃""];[""カ゚"";""◇➄""];[""ク゚"";""◇➅""];[""ケ゚"";""◇➆""];[""ツ゚"";""◇➇""];[""ト゚"";""◇➈""];[""プ"";""◇➉""];[""プ"";""ㇷ゚""];[""ア"";""ァ""];[""イ"";""ィ""];[""ウ"";""ゥ""];[""エ"";""ェ""];[""オ"";""ォ""];[""カ"";""ヵ""];[""ク"";""ㇰ""];[""ケ"";""ヶ""];[""シ"";""ㇱ""];[""ス"";""ㇲ""];[""ツ"";""ッ""];[""ト"";""ㇳ""];[""ヌ"";""ㇴ""];[""ハ"";""ㇵ""];[""ヒ"";""ㇶ""];[""フ"";""ㇷ""];[""ヘ"";""ㇸ""];[""ホ"";""ㇹ""];[""ム"";""ㇺ""];[""ヤ"";""ャ""];[""ユ"";""ュ""];[""ヨ"";""ョ""];[""ラ"";""ㇻ""];[""リ"";""ㇼ""];[""ル"";""ㇽ""];[""レ"";""ㇾ""];[""ロ"";""ㇿ""]
      ;[""◇➁"";""け゚""];[""◇➂"";""つ゚""];[""◆➁"";""ヅ""];[""◆➂"";""ヴ""];[""◇➃"";""ツ゚""];[""◆➃"";""ヷ""];[""◇➄"";""カ゚""];[""◇➅"";""ク゚""];[""◇➆"";""ケ゚""];[""◇➇"";""ツ゚""];[""◇➈"";""ト゚""];[""◇➉"";""プ""];[""◆"";""わ゙""];[""◇"";""か゚""]
      )";
   $小半=
      "Substitute(KanaHankaku(
         Substitute(Katakana(RomanHankaku(Lower($itm)))
         ;[""ヷ"";""ヷ""];[""ヺ"";""ヺ""];[""カ゚"";""カ゚""];[""キ゚"";""キ゚""];[""ク゚"";""ク゚""];[""ケ゚"";""ケ゚""];[""コ゚"";""コ゚""];[""セ゚"";""セ゚""];[""ツ゚"";""ツ゚""];[""ト゚"";""ト゚""])
         )
      ;[""ヅ"";""◇""];[""ヷ"";""◇➁""];[""ヴ"";""◇➂""];[""ヺ"";""◇➃""];[""ツ゚"";""◆""];[""ア"";""ァ""];[""イ"";""ィ""];[""ウ"";""ゥ""];[""エ"";""ェ""];[""オ"";""ォ""];[""ツ"";""ッ""];[""ヤ"";""ャ""];[""ユ"";""ュ""];[""ヨ"";""ョ""];[""ㇷ゚"";""プ""];[""ヵ"";""カ""];[""ㇰ"";""ク""];[""ヶ"";""ケ""];[""ㇱ"";""シ""];[""ㇲ"";""ス""];[""ㇳ"";""ト""];[""ㇴ"";""ヌ""];[""ㇵ"";""ハ""];[""ㇶ"";""ヒ""];[""ㇷ"";""フ""];[""ㇸ"";""ヘ""];[""ㇹ"";""ホ""];[""ㇺ"";""ム""];[""ㇻ"";""ラ""];[""ㇼ"";""リ""];[""ㇽ"";""ル""];[""ㇾ"";""レ""];[""ㇿ"";""ロ""];[""ヮ"";""ワ""]
      ;[""◇➁"";""ヷ""];[""◇➂"";""ヴ""];[""◇➃"";""ヺ""];[""◇"";""ヅ""];[""◆"";""ツ゚""]
      )";
   $小全=
      "Substitute(KanaZenkaku(
         Substitute(Katakana(RomanZenkaku(Lower($itm)))
         ;[""カ゚"";""カ゚""];[""キ゚"";""キ゚""];[""ク゚"";""ク゚""];[""ケ゚"";""ケ゚""];[""コ゚"";""コ゚""];[""セ゚"";""セ゚""];[""ツ゚"";""ツ゚""];[""ト゚"";""ト゚""])
         )
      ;[""ヷ"";""◇""];[""カ゚"";""◆""];[""ク゚"";""◆➁""];[""ケ゚"";""◆➂""];[""ツ゚"";""◆➃""];[""ト゚"";""◆➄""];[""プ"";""ㇷ゚""]
;[""ア"";""ァ""];[""イ"";""ィ""];[""ウ"";""ゥ""];[""エ"";""ェ""];[""オ"";""ォ""];[""カ"";""ヵ""];[""ク"";""ㇰ""];[""ケ"";""ヶ""];[""シ"";""ㇱ""];[""ス"";""ㇲ""];[""ツ"";""ッ""];[""ト"";""ㇳ""];[""ヌ"";""ㇴ""];[""ハ"";""ㇵ""];[""ヒ"";""ㇶ""];[""フ"";""ㇷ""];[""ヘ"";""ㇸ""];[""ホ"";""ㇹ""];[""ム"";""ㇺ""];[""ヤ"";""ャ""];[""ユ"";""ュ""];[""ヨ"";""ョ""];[""ラ"";""ㇻ""];[""リ"";""ㇼ""];[""ル"";""ㇽ""];[""レ"";""ㇾ""];[""ロ"";""ㇿ""];[""ワ"";""ヮ""]
      ;[""◆➁"";""ク゚""];[""◆➂"";""ケ゚""];[""◆➃"";""ツ゚""];[""◆➄"";""ト゚""];[""◇"";""ヷ""];[""◆"";""カ゚""]
      )";
   $大無=
      "Substitute(Upper($itm)
      ;[""ぁ"";""あ""];[""ぃ"";""い""];[""ぅ"";""う""];[""ぇ"";""え""];[""ぉ"";""お""];[""ゕ"";""か""];[""ゖ"";""け""];[""っ"";""つ""];[""ゃ"";""や""];[""ゅ"";""ゆ""];[""ょ"";""よ""];[""ゎ"";""わ""]
      ;[""ァ"";""ア""];[""ィ"";""イ""];[""ゥ"";""ウ""];[""ェ"";""エ""];[""ォ"";""オ""];[""ッ"";""ツ""];[""ャ"";""ヤ""];[""ュ"";""ユ""];[""ョ"";""ヨ""];[""ㇷ゚"";""プ""];[""ァ"";""ア""];[""ィ"";""イ""];[""ゥ"";""ウ""];[""ェ"";""エ""];[""ォ"";""オ""];[""ヵ"";""カ""];[""ㇰ"";""ク""];[""ヶ"";""ケ""];[""ㇱ"";""シ""];[""ㇲ"";""ス""];[""ッ"";""ツ""];[""ㇳ"";""ト""];[""ㇴ"";""ヌ""];[""ㇵ"";""ハ""];[""ㇶ"";""ヒ""];[""ㇷ"";""フ""];[""ㇸ"";""ヘ""];[""ㇹ"";""ホ""];[""ㇺ"";""ム""];[""ャ"";""ヤ""];[""ュ"";""ユ""];[""ョ"";""ヨ""];[""ㇻ"";""ラ""];[""ㇼ"";""リ""];[""ㇽ"";""ル""];[""ㇾ"";""レ""];[""ㇿ"";""ロ""];[""ヮ"";""ワ""]
      )";
   $大半=
      "Substitute(KanaHankaku(
         Substitute(Katakana(RomanHankaku(Upper($itm)))
         ;[""ヷ"";""ヷ""];[""ヺ"";""ヺ""];[""カ゚"";""カ゚""];[""キ゚"";""キ゚""];[""ク゚"";""ク゚""];[""ケ゚"";""ケ゚""];[""コ゚"";""コ゚""];[""セ゚"";""セ゚""];[""ツ゚"";""ツ゚""];[""ト゚"";""ト゚""])
         )
      ;[""ァ"";""ア""];[""ィ"";""イ""];[""ゥ"";""ウ""];[""ェ"";""エ""];[""ォ"";""オ""];[""ッ"";""ツ""];[""ャ"";""ヤ""];[""ュ"";""ユ""];[""ョ"";""ヨ""];[""ㇷ゚"";""プ""];[""ヵ"";""カ""];[""ㇰ"";""ク""];[""ヶ"";""ケ""];[""ㇱ"";""シ""];[""ㇲ"";""ス""];[""ㇳ"";""ト""];[""ㇴ"";""ヌ""];[""ㇵ"";""ハ""];[""ㇶ"";""ヒ""];[""ㇷ"";""フ""];[""ㇸ"";""ヘ""];[""ㇹ"";""ホ""];[""ㇺ"";""ム""];[""ㇻ"";""ラ""];[""ㇼ"";""リ""];[""ㇽ"";""ル""];[""ㇾ"";""レ""];[""ㇿ"";""ロ""];[""ヮ"";""ワ""]
      )";
   $大全=
      "Substitute(KanaZenkaku(
         Substitute(Katakana(RomanZenkaku(Upper($itm)))
         ;[""カ゚"";""カ゚""];[""キ゚"";""キ゚""];[""ク゚"";""ク゚""];[""ケ゚"";""ケ゚""];[""コ゚"";""コ゚""];[""セ゚"";""セ゚""];[""ツ゚"";""ツ゚""];[""ト゚"";""ト゚""])
        )
      ;[""ㇷ゚"";""プ""];[""ァ"";""ア""];[""ィ"";""イ""];[""ゥ"";""ウ""];[""ェ"";""エ""];[""ォ"";""オ""];[""ヵ"";""カ""];[""ㇰ"";""ク""];[""ヶ"";""ケ""];[""ㇱ"";""シ""];[""ㇲ"";""ス""];[""ッ"";""ツ""];[""ㇳ"";""ト""];[""ㇴ"";""ヌ""];[""ㇵ"";""ハ""];[""ㇶ"";""ヒ""];[""ㇷ"";""フ""];[""ㇸ"";""ヘ""];[""ㇹ"";""ホ""];[""ㇺ"";""ム""];[""ャ"";""ヤ""];[""ュ"";""ユ""];[""ョ"";""ヨ""];[""ㇻ"";""ラ""];[""ㇼ"";""リ""];[""ㇽ"";""ル""];[""ㇾ"";""レ""];[""ㇿ"";""ロ""];[""ヮ"";""ワ""]
      )";
   $SUB=   //← サブ関数を定義(選択値別字高幅変換する関数)
      "List(
         Case($flg1=0 and ($flg2=1 or $flg2=3); Evaluate($無半));
         Case($flg1=0 and ($flg2=2 or $flg2=3); Evaluate($無全));
         Case(($flg1=1 or $flg1=3) and $flg2=0; Evaluate($小無));
         Case(($flg1=1 or $flg1=3) and ($flg2=1 or $flg2=3); Evaluate($小半));
         Case(($flg1=1 or $flg1=3) and ($flg2=2 or $flg2=3); Evaluate($小全));
         Case(($flg1=2 or $flg1=3) and $flg2=0; Evaluate($大無));
         Case(($flg1=2 or $flg1=3) and ($flg2=1 or $flg2=3); Evaluate($大半));
         Case(($flg1=2 or $flg1=3) and ($flg2=2 or $flg2=3); Evaluate($大全))
      )";
   //$i=0; $res="";
   $FNC=   //← ループ文字種変換関数を定義(1行づつ切り出して変換処理する再帰式)
      "Case($i=ValueCount($txt); $res;
         Let([
            $i=$i+1;
            $itm=GetValue($txt; $i);
            $res=List($res; $itm; Evaluate($SUB))
         ]; Evaluate($FNC))
      )";
   //=========
   //$j=0; $rst="";
   $UNQ=   //← ループ重複排除関数を定義(1行づつ切り出して重複排除する再帰式)
      "Case($j=ValueCount($lst); $rst;
         Let([
            $j=$j+1;
            #itm=GetValue($lst; $j);
            #itm=Choose(Exact(GetValue(FilterValues($rst;#itm);1); #itm); #itm);
            $rst=List($rst; #itm)
         ]; Evaluate($UNQ))
      )"

];
   Let([$lst=Evaluate($FNC)]; Evaluate($UNQ))   //←定義関数$FNCと$UNQを実行する
)

編集者 Hiro (2019-05-16 23:21:20)

オフライン

#13 昨日 02:35:29

初心者りとらい
ゲストユーザー

Re: [解決] スクリプト内でのLoopについて教えて下さい。

Hiro様
分離方式の併記ありがとうございます。
まさに今、$UNQの中身をアレコレ考えて色々試していた所です。助かります。
理解には時間がかかりそうです。
動作検証の結果は、もちろん問題なかったです。
ただ、今回は前回含めての御教授頂いて来た事の集大成的な意味合いもあり、私が理解に至って無い事と
発想力というか実現力というか・・やはりもっと色々理解を要すると痛感しております。
先程も書きましたが、まだ色々と理解の為、試している所なのですが、どうしても時間を要してしまいます。
また、Hiro様以外の方々のご指摘や御提示頂いた内容の理解にも至れておらず、すみません。
とはいうものの、Hiro様の御提示下さった式で期待する動作は得れている為、一旦、解決とします。
何卒ご容赦頂き、スゴイ時間かかりますが、色々やってみて判断を仰ぐ事がございましたら
気の向いた時で結構ですので、お教え頂けますと大変にありがたいです。
長文になるため今の所は以上とさせて頂きます。
ありがとうございました。

クィック投稿

メッセージを書いて送信してください。
登録の確認

実在の人物による登録であることを確認します。

Board footer