みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
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の所も読んだのですが、お教え頂きたいです。
> [元データ]
> 1980
> ZZZ
> AAA
これは3レコードですか?
とすると、
> 1980
1980
> ZZZ
> ZZZ
> AAA
> AAA
これはどう考えればいいのですか?
Offline
面倒な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の実行
)
Last edited by Hiro (2019-04-26 21:33:28)
Offline
返答順にて
チポ様、これはレコードではなくフィールド名が元データというテキストタイプのフィールドです。ちなみに、フィールド名が文字幅というテキストタイプのフィールドについては入力時のコントロールスタイルはチェックボックスセットで値一覧には半角と全角としていてボックスにチェックを入れられるようにしています。
Hiro様、意図をご理解頂いた上、ご提案頂きありがとうございます。
結果フィールドを計算にして試してみます。
小生、Evaluate関数が苦手かつ、スクリプトでのLoop関数が良くわからないので・・・先ずはEvaluate関数につき、調べてみます。
後日、疑問点をお伺いしたく希望します。
取り急ぎご返答まで
了解です
> 行数をカウントする時にカウントしているのは、変換した値を含んだ行数なのでしょうか
Loopで行を移動している時のことですよね。
変換前後に関係なく、現在の行を数えますね。
ですから、
変換後の現在の行が、フィールドの行数と同じならLoopを抜ければいいでしょう。
Offline
スクリプトで作るなら、このような事でしょうね。
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
Last edited by Shin (2019-04-26 11:43:43)
Offline
チポ様 返答ありがとうございます。正直な所、イメージがわきません。
但し、Hiro様のご回答より、元データの値一覧からGetValue関数で文字列を取り出しているようだと検証の結果から類推しております。
shin様、スクリプトありがとうございます。一見して何故このスクリプトになるのかが理解できないので、検証にお時間頂きたいです。
Hiro様、自分なりに考えて、理解してみました。そして、色々と試してみまして、文字幅だけでなく文字高さ(小文字、大文字)も追加して作成してみています。
やってみて多分ですが、 $SUB=””の中でカスタム関数は使えないように思いました。動作がおかしくなってしまったからです。この考え方で合っていますでしょうか?
また、データの値も結果に含みたく思いました。現在は下記のようになる為にどうしたら良いか試している所です。
[元データ]
日本
にっぽん
にほん
Japan
[結果]文字高さ(小文字【※小書き文字を含める】・大文字)、文字幅(半角・全角)を選択した場合
日本 ←元データの1行目
にっぽん ←元データの2行目
ニッポン ←小文字半角変換による値
ニッポン ←小文字全角変換による値
ニツポン ←大文字半角変換による値
ニツポン ←大文字半角変換による値
にほん ←元データの3行目
ニㇹン ←小文字全角変換による値
ニホン ←大文字半角変換による値
ニホン ←大文字全角変換による値
Japan ←元データの4行目
japan ←小文字半角変換による値
japan ←小文字全角変換による値
JAPAN ←大文字半角変換による値
JAPAN ←大文字全角変換による値
まだ、途中なのですが・・下記の課題が未解決なので・・
・平仮名に半角・全角の種類はないので、選択した時点で片仮名に変換して反映したい。但し、幅の指定が無い場合は、小文字に該当する小書き文字を適用する。
・選択を反映した結果がずらっと並んだもので重複値を1個にまとめるのにどうしたら良いかが分かりません。
もう少しで課題の1つ目はクリアできそうなので・・出来たら書き込みますのでお知恵を拝借したく先にお願い申し上げます。
また 過去ログ id=8970『値一覧内の重複削除と文字種変換のスクリプトを教えて下さい。』の同じ問いを繰り返すのでしょうか?
Offline
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関数でリスト化した値
の様な感じの式と思うのですが・・・分かりません。
次に式をドッキングしたものはどうすれば良いのか書き方が分からないです。
考え方がそもそも間違っているかもしれないですが、正解はどうしたら良いでしょうか?
>#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を計算実行する
)
【修正履歴】
随時、気が付いたときに、改善修正を補足しています。
以下の最終編集日時から判断して旧式なら最新修正式へ更新ください。
Last edited by Hiro (2019-05-16 12:28:52)
Offline
Hiro様
早速のお返事ありがとうございます。
褒めて頂けて嬉しいです。あれからずっと前回のも含めて何でなのか考えて、アドバイスを頂いた事を生かして式を捻り出して良かったです。
実はあれから毎日あれこれ試して、自分で式を作っては動かず・・カスタム関数も試したが式に含めると何故かエラーが出たりで・・・何回も作り直してみました。
あれからのあれは4月25日なので・・・ゴールデンウイークを含め凄い時間かかったのですが・・・
さすがはHiro様!昨日書き込んで今日にご返信頂けるとは!いろんな意味で脱帽です。重ねてお礼申し上げます。
さて、作製頂きました中の
$UNQ=※重複削除関数$UNQ を定義の中身については分かるような分からないような・・・式のイメージみたいなのは何となく分かる程度ですのでまた色々作ってみて理解に励みます。
$SUB=← サブ関数を定義(選択値別字高幅変換する関数)の中身については私的に理解に熟考を要する気配がヒシヒシと漂ってますのでお時間下さい。
というのもドッキングしたら$FNCより後に何らかの式が来ると考えていたからです。
そして書き込み頂いたものは文字数や式の長さを含め、凄いまとまってまして・・・今は驚きの方が先に来てまして、直観的な理解に及ばないのです。
ですので今の所、教えて頂かなければならない質問が発生しそうですが何をどう聞いたら良いかが分からないのです。
検証を含めお時間頂きたいです。
取り急ぎお返事まで
>#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を実行する
)
Last edited by Hiro (2019-05-16 23:21:20)
Offline
Hiro様
分離方式の併記ありがとうございます。
まさに今、$UNQの中身をアレコレ考えて色々試していた所です。助かります。
理解には時間がかかりそうです。
動作検証の結果は、もちろん問題なかったです。
ただ、今回は前回含めての御教授頂いて来た事の集大成的な意味合いもあり、私が理解に至って無い事と
発想力というか実現力というか・・やはりもっと色々理解を要すると痛感しております。
先程も書きましたが、まだ色々と理解の為、試している所なのですが、どうしても時間を要してしまいます。
また、Hiro様以外の方々のご指摘や御提示頂いた内容の理解にも至れておらず、すみません。
とはいうものの、Hiro様の御提示下さった式で期待する動作は得れている為、一旦、解決とします。
何卒ご容赦頂き、スゴイ時間かかりますが、色々やってみて判断を仰ぐ事がございましたら
気の向いた時で結構ですので、お教え頂けますと大変にありがたいです。
長文になるため今の所は以上とさせて頂きます。
ありがとうございました。
追記です。
なんとなくですが、下記理解で良いでしょうか?
Evaluate関数で記述されている内容は式の下から上に順を追って計算されていく。
Let関数の変数でEvaluateで記述する事によってEvaluate関数の内容が反映(計算)される。
元データ自体の重複も排除する仕様→凄いです!同時に出来る所まで考えが至らなかったので、ひたすら感心しています。発想がスゴイです。
一旦、高さや幅で元データを変換したもの$lstからFilterValues関数でローマ字を抽出すると完全一致以外の値も抽出されてしまう。
上記同様にExact関数で完全一致できると考えておりましたが数字や記号の場合は結果がどうも期待と異なります。
[元データ]1
[指定:高さ=小文字、大文字:幅=半角、全角]
[期待の結果]
1
1
[実際の結果]
1
1
1
という感じになりました。内包方式で元データが半角全角問わず似た結果になりました。
どうしたら期待の結果になるか色々試す所まで行けて無くて、まだ式の理解の最中です。
まだまだ時間下さいませ。
一旦、高さや幅で元データを変換したもの$lstからFilterValues関数でローマ字を抽出すると完全一致以外の値も抽出されてしまう。
上記同様にExact関数で完全一致できると考えておりましたが数字や記号の場合は結果がどうも期待と異なります。
[元データ]1
[指定:高さ=小文字、大文字:幅=半角、全角]
[期待の結果]
1
1
[実際の結果]
1
1
1
という感じになりました。内包方式で元データが半角全角問わず似た結果になりました。
#10内包式のバグを確認しました。いつも乍ら確認試行が甘々ですみません。^^;;
原因は、現在変換作業中の変換データの重複チェックを、懸念し乍もチョンボしていた、ためです。
現在作業中新規追加分も含め重複チェックする様バグフィックスした校正式を以下に記しますので、#10内包式と入れ替えてください。(※バグ修正箇所は青字で明示)
※なお、先に内包式の方を提案した理由は、高負荷な再帰ループ計算を一度だけに収めるためです。結果的には、負荷軽減効果はそうでも無くなってしまったですが...。
【#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)))
;[""カ゚"";""カ゚""];[""キ゚"";""キ゚""];[""ク゚"";""ク゚""];[""ケ゚"";""ケ゚""];[""コ゚"";""コ゚""];[""セ゚"";""セ゚""];[""ツ゚"";""ツ゚""];[""ト゚"";""ト゚""])
)
;[""ㇷ゚"";""プ""];[""ァ"";""ア""];[""ィ"";""イ""];[""ゥ"";""ウ""];[""ェ"";""エ""];[""ォ"";""オ""];[""ヵ"";""カ""];[""ㇰ"";""ク""];[""ヶ"";""ケ""];[""ㇱ"";""シ""];[""ㇲ"";""ス""];[""ッ"";""ツ""];[""ㇳ"";""ト""];[""ㇴ"";""ヌ""];[""ㇵ"";""ハ""];[""ㇶ"";""ヒ""];[""ㇷ"";""フ""];[""ㇸ"";""ヘ""];[""ㇹ"";""ホ""];[""ㇺ"";""ム""];[""ャ"";""ヤ""];[""ュ"";""ユ""];[""ョ"";""ヨ""];[""ㇻ"";""ラ""];[""ㇼ"";""リ""];[""ㇽ"";""ル""];[""ㇾ"";""レ""];[""ㇿ"";""ロ""];[""ヮ"";""ワ""]
)";
$UNQ= //← ※重複削除関数$UNQ を定義
"Choose(
Exact(GetValue(FilterValues($rst;$add);1); $add)
; Let([$rst=List($rst;$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;$rst=$res]; Evaluate($UNQ)));
$res=List($res; Evaluate($SUB))
]; Evaluate($FNC))
)"
];
Evaluate($FNC) //上記定義関数式$FNCを計算実行する
)
Last edited by Hiro (2019-05-20 14:34:59)
Offline
Hiro様
早速のご返答ありがとうございます。
丸写しさせて頂き、元データが「1」で試してみました。しっかり修正されており、短時間でサスガ!と感嘆しております。
ご返信頂いた内容より、内包方式のご提案の意図が明確になり、そうなんだ!と勉強になりました。
私事ですが、適用させて頂くフィールド数が多いので、ひとまず丸写しして、その中で元データが異なる場合の動作確認も出来るかと考えております。
但し、式の理解は後になってしまうのですが・・・本来は自分の理解を推し量る目的や理解できなかった事について勉強させて頂く事にあったのですが。
実際、かなり力量不足というか理解が追いつかない事が多く、一つ一つを理解して、ご返答頂いた式に辿り着くには相当時間がかかりそうな事だけは分かりました。
諦めずに探求してみますが、僕は凄く時間がかかるので・・・例えば14日の書き込みをするのに2時間かかったりしてます。
一応ですが、質問する前に試してみてはいるのですが試し方が悪かったりで、逆にズレた質問してしまう事もあるかと思いますが、ご容赦頂きたいです。
取り急ぎ以上をご報告させて頂きます。
Pages: 1
[ Generated in 0.012 seconds, 9 queries executed - Memory usage: 798.39 KiB (Peak: 923.3 KiB) ]