初心者のFileMaker pro Q&A (旧掲示板)

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

1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)

You are not logged in.

Announcement

新しい掲示板は、こちら:https://fm-aid.com/forum/t/filemaker


#1 2013-10-11 19:49:24

誘導されてきました
Guest

最初のカタカナを取り出す

みんなで…から飛んできました。
環境は
win7
filemaker pro12
です。

正規表現のプラグインなどを利用しないで、特定フィールドの文字列で
最初に出現するカタカナを取り出すことは出来ないでしょうか?

わからないままだとあきらめがつかなくて。。。
よろしくお願いいたします。

#2 2013-10-11 19:56:27

wader
Member

Re: 最初のカタカナを取り出す

安直に
Left(Filter(フィールド;”ここにカタカナを全部並べる");1)

Offline

#3 2013-10-15 10:45:16

concat
Guest

Re: 最初のカタカナを取り出す

安直なのは嫌い?
再帰もどきでやると、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)
)
「ン」より後にもヴとかありますね。記号はどうするのかな。

#4 2013-10-17 12:02:37

concat
Guest

Re: 最初のカタカナを取り出す

全角に変換しないで、両方調べないとだめなのかな。

#5 2013-10-18 11:31:08

himaganee
Guest

Re: 最初のカタカナを取り出す

ひらがなに変換できる最初の文字を探す

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 )
)

#6 2013-10-23 15:14:40

himaganee
Guest

Re: 最初のカタカナを取り出す

テキストが長くても対応できるようにしてみた。
(しかし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)
)

#7 2013-10-23 20:53:25

wader
Member

Re: 最初のカタカナを取り出す

カタカナ一覧の生成のとこだけ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

#8 2013-10-24 09:33:07

himaganee
Guest

Re: 最初のカタカナを取り出す

あ~、そうか、その式で計算した
$zenkaku & $hankaku
を、最初の安直な式に埋めこめば、長いだけで簡単な式になりますね。

Registered users online in this topic: 0, guests: 1
[Bot] claudebot

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.012 seconds, 8 queries executed - Memory usage: 513.27 KiB (Peak: 517.81 KiB) ]