みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
みんなで…から飛んできました。
環境は
win7
filemaker pro12
です。
正規表現のプラグインなどを利用しないで、特定フィールドの文字列で
最初に出現するカタカナを取り出すことは出来ないでしょうか?
わからないままだとあきらめがつかなくて。。。
よろしくお願いいたします。
安直に
Left(Filter(フィールド;”ここにカタカナを全部並べる");1)
Offline
安直なのは嫌い?
再帰もどきでやると、250文字ぐらい以内に見つからないとメモリ不足になる。
Let([
$s=KanaZenkaku(フィールド);
$a=Code(\"ァ\");
$z=Code(\"ン\");
$f="Case($s=\"\";\"\";Let(c=Code(Left($s;1));Case(c>=$a and c<=$z;Char(c);Let($s=Replace($s;1;1;\"\");Evaluate($f)))))"
];
Evaluate($f)
)
「ン」より後にもヴとかありますね。記号はどうするのかな。
全角に変換しないで、両方調べないとだめなのかな。
ひらがなに変換できる最初の文字を探す
Let ( [
$s = テキスト ;
$t = Hiragana ( $s ) ;
$i = Length ( $s ) ;
$f = "Case(not Exact(Middle($s;$n;1);Middle($t;$n;1));Middle($s;$n;1);Let($n=$n+1;Case($n<=$i;Evaluate($f))))" ;
$n = 1
] ;
Evaluate ( $f )
)
テキストが長くても対応できるようにしてみた。
(しかし15000文字で10秒ぐらいかかる。)
$f1="If("&$cond&";Evaluate($do)+";
にした方が少し早いけど、すぐ見つかる場合はむしろ少し遅くなるようです。
Let([
//
$start=Get(UTCmSecs);
$s = text ;
$t = Hiragana ( $s ) ;
$n = Length ( $s ) ;
$cond="$pos=0 and $i<$n";
$do="Let($i=$i+1;Case(not Exact(Middle($s;$i;1);Middle($t;$i;1));Let($pos=$i;$pos)))";
$i=0;
$pos=0;
$f1="If(Evaluate($cond);Evaluate($do)+";
$f2="";
$g1=Substitute(10^400-1;9;"$f1&");
$g=Evaluate($g1&"$f2")&"0"&Substitute(10^400-1;9;")");
$g2=Substitute($g;"$do";"$g");
a=Evaluate($g2)
];
Case($pos;Middle($s;$pos;1))
//
& ¶ & (Get(UTCmSecs)-$start)
)
カタカナ一覧の生成のとこだけEvaluate計算式にすれば、早いです。
Let([
//
$start=Get(UTCmSecs);
$s1=Code("ァ");
$e1=Code("ヺ");
$s2=Code("ヲ");
$e2=Code("ン");
$i=-1;
$zenkaku=Evaluate(Substitute(10^($e1-$s1)-1;9;"Let($i=$i+1;Char($s1+$i))&")&"Char($e1)");
$i=-1;
$hankaku=Evaluate(Substitute(10^($e2-$s2)-1;9;"Let($i=$i+1;Char($s2+$i))&")&"Char($e2)")
];
Left(Filter(text; $zenkaku & $hankaku); 1)
//
& ¶ & (Get(UTCmSecs)-$start)
)
Offline
あ~、そうか、その式で計算した
$zenkaku & $hankaku
を、最初の安直な式に埋めこめば、長いだけで簡単な式になりますね。
Pages: 1
[ Generated in 0.012 seconds, 8 queries executed - Memory usage: 513.27 KiB (Peak: 517.81 KiB) ]