みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
ファイルメーカー初心者です。
テキストフィールドに下記のような内容があるとします。
01青線 150.12345
02赤線 129.14567
03緑線 20.54689
04黄線 12.56789
この中から
02赤線の数値、129.14567だけを抽出したいです。
ポイントとしては、01青線がない場合、02赤線が1行目にきます。
また、数値は固定ではなく変動します。
どうか力を貸してください。
よろしくお願いします。
ちょっときつく書きますが。
データベースの構造として、
そのテキストがその様な値を持つ事自体がだめ。1行を1レコードにするように取り込むべきでしょう。
また、項目とデータが1行にあるのがだめ。それぞれをフィールドに分けて格納するべきでしょう。
次に、何を基準に抽出するのかを書きましょう。
ポイントも、的外れで何を書きたいのかわかりません。
とりあえず、"02赤線" を含む行の数値を求めるには、
Let (
[ pos0 = Position ( text ; "02赤線" ; 1 ; 1 ) + Length ( "02赤線" ) ;
pos1 = Position ( text ; ¶ ; pos0 ; 1 )
] ;
Middle ( text ; pos0 ; pos1 - pos0 )
)
Offline
とりあえず動けば良いレベルでベタベタな式ですけど…
ゴミとか入ってしまうと動作保証できません(^^ゞ
Let (
[
~value1 = GetValue ( 元データ ; 1 ) ;
~value2 = GetValue ( 元データ ; 2 ) ;
~value3 = GetValue ( 元データ ; 3 ) ;
~value4 = GetValue ( 元データ ; 4 ) ;
~return = Case (
PatternCount ( ~value1 ; "02赤線" ) ; RightWords ( ~value1 ; 1 ) ;
PatternCount ( ~value2 ; "02赤線" ) ; RightWords ( ~value2 ; 1 ) ;
PatternCount ( ~value3 ; "02赤線" ) ; RightWords ( ~value3 ; 1 ) ;
PatternCount ( ~value4 ; "02赤線" ) ; RightWords ( ~value4 ; 1 ) ;
””
)
] ;
GetAsNumber ( ~return )
)
Last edited by koeda (2019-11-02 16:51:46)
Offline
koeda様
理想通りに出来ました!
ご協力いただきありがとうございます。大変助かりました!!
終わってますが、
>#3kpedaさんの仮式より、汎用性のより高い動的式の提案です。
その時の行数に応じて、動的に動作するループ計算式です。
【ループ計算式】(計算結果:数値タイプを指定)
Let(
[
$txt=テキストフィールド;
$key=Quote("02赤線");
$i=0;
$res="";
$LOOP=
"Case(
$i=ValueCount($txt) or Length($res); $res;
Let([
$i=$i+1;
#itm=GetValue($txt; $i);
$res=Case(PatternCount(#itm; Evaluate($key)); #itm)
]; Evaluate($LOOP))
)"
];
RightWords(Evaluate($LOOP); 1)
)
Offline
Pages: 1
[ Generated in 0.034 seconds, 9 queries executed - Memory usage: 509.05 KiB (Peak: 515.94 KiB) ]