みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
FM13です。
以前の質問より全半角混合のテキストAフィールドのバイト数を取得できるようになりました。
Length ( A & Filter ( A } ; RomanZenkaku ( KanaZenkaku ( A ))))
もしAフィールドが15バイト以上の場合は、15バイトのみ取得するようにすることは可能でしょうか。
Left関数を使用としたところ全半角すべて1文字となるためどうしたものか悩んでいます。
よろしくお願い申し上げます。
Offline
文字列がSHIFT-JISとしてバイト数を求めた場合、
12345678901234あ
上記例の場合は、16バイトとなります。15バイト目が あ の1バイト分となるため、15バイトちょうどの文字列は、取得できません。
Left関数 で、15文字取得
バイト数判定
15バイトを超えていたら
Left関数 で、14文字取得
15バイト以内なら終了
という感じでスクリプトでLoop処理する必要があるでしょう。
Offline
ぴったり15バイトにならない場合は14バイトを取る再起式です。
Let ( [$t = テキスト ;
$c = 6 ;
$b = 0 ;
$f = "Case ( $b = 15 ; $l ;
$b > 15 ; Left ( $l ; $c - 1 ) ;
Let ( [ $c= $c + 1 ;
$l = Left ( $t ; $c ) ;
$b = Length ( $l & Filter ( $l ; RomanZenkaku ( KanaZenkaku ( $l ) ) ) ) ] ;
Evaluate ( $f ) ) )"
] ;
Evaluate ( $f ) )
Offline
ああ、14バイト以下の場合を考慮しないとダメです
Case ( Length ( テキスト & Filter ( テキスト ; RomanZenkaku ( KanaZenkaku ( テキスト ) ) ) ) > 14 ;
Let ( [$t = テキスト ;
$c = 6 ;
$b = 0 ;
$f = "Case ( $b = 15 ; $l ;
$b > 15 ; Left ( $l ; $c - 1 ) ;
Let ( [ $c= $c + 1 ;
$l = Left ( $t ; $c ) ;
$b = Length ( $l & Filter ( $l ; RomanZenkaku ( KanaZenkaku ( $l ) ) ) ) ] ;
Evaluate ( $f ) ) )"
] ;
Evaluate ( $f ) ) ; テキスト )
訂正お願いします。
Offline
チポ様毎度ありがとうございます。
ご回答を見る限り自分では到底たどり着ける範囲ではなさそうですが、
バッチリ解決いたしました。
Offline
Pages: 1
[ Generated in 0.005 seconds, 7 queries executed - Memory usage: 509.16 KiB (Peak: 516.04 KiB) ]