みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
あるフィールドにいろんなデータが入っていたとして・・・
「{」と「}」の間にある文字列のみ抜き取る関数を探しているのですが
どのような方法があるでしょうか?
ご教授をよろしくお願いします。
Let([$txt=テキスト;
$p1=Position ( $txt ; "{" ; 1 ; 1 );
$p2=Position ( $txt ; "}" ; 1 ; 1 );
$tn=$p2-$p1];
Middle($txt;$p1;$tn)
)
Offline
・ "あい{うえ}お" → "うえ" を得る式例、
↓
・ Left("あい";0)&"うえ"&Left("お";0) → "うえ"
↓
・ Evaluate( "Left(\"あい\";0)&\"うえ\"&Left(\"お\";0)" ) → "うえ"
↓
・上記固定式を関数式として生成する式。(複数箇所にも対応) "あい{うえ}おか{きくけ}こ" → "うえきくけ"
Evaluate( "Left(\"" & Substitute(あるフィールド; ["{"; "\";0)&\""]; ["}"; "\"&Left(\""]) & "\";0)" )
【補足】
・もし、複数結果は改行リストで得るなら、 (複数件抽出可能、{}内改行は"¶"で表記)
"あい{うえ}おか{きく¶け}こ" → "{うえ}{きく¶け}" → "うえ" &¶& "きく¶け"
Let([
#fnc=("Left(\"" & Substitute(あるフィールド; ["{";"\";0)&\"{"]; ["}";"}\"&Left(\""]) & "\";0)")
];
Substitute(Evaluate(#fnc); [¶;"\¶"];["}{";¶];["{";""];["}";""])
)
Last edited by Hiro (2017-01-01 13:47:05)
Offline
ごめんなさい
Let([$txt=テキスト;
$p1=Position ( $txt ; "{" ; 1 ; 1 );
$p2=Position ( $txt ; "}" ; 1 ; 1 );
$tn=$p2-$p1];
Middle($txt;$p1+1;$tn-1)
)
が正しい式です。
Position //文字の位置を知る関数
Middle //文字をテキストの途中から取り出す関数
Let //計算がいくつかに分かれる時に使う関数
が大雑把な関数の使い方です
詳しくはヘルプの関数リファレンスを参照してください
Offline
別案でループ計算式で求める方法。(約200件位まで抽出可能、{}内改行は¶で表記)
Let([
$n=PatternCount(あるフィールド; "{");
$txt=Substitute(あるフィールド; [¶;"\¶"];["{";¶]);
$vlt=MiddleValues($txt; 2; $n);
$fnc=
"Case(IsEmpty($vlt); $res;
Let([
$gvl=GetValue($vlt; 1);
$add=GetValue(Substitute($gvl; [\"}\"; \"\¶\"]); 1);
$res=List($res; $add);
$vlt=MiddleValues($vlt; 2; $n)
]; Evaluate($fnc))
)"
];
Evaluate($fnc)
)
Offline
ありがとうございます。
コメントが遅れ申し訳ありません、
試させていただきます
Pages: 1
[ Generated in 0.005 seconds, 7 queries executed - Memory usage: 516.97 KiB (Peak: 521.51 KiB) ]