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

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

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

You are not logged in.

Announcement

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


#1 2022-06-07 18:29:20

きー
Guest

半角全角混在フィールドの文字数のカウントについて

印刷用紙のスペースの問題から、条件付き書式で
18文字以上からはフォントを小さくするようにしています
半角があると、まだ余裕があるのに条件を満たしてしまい小さくなってしまいます

半角は0.5とカウントして文字数をカウントすることはできませんか?

FM19WIN10です

#2 2022-06-07 22:57:16

Shin
Member

Re: 半角全角混在フィールドの文字数のカウントについて

半角の文字をフィルターして数えるといいでしょうね。
例えば、
Filter ( "ABCABC" ; "ABCDEF" ) は、"ABC" を返してきます。ですから、Length ( "ABCABC" ) - Length ( Filter ( "ABCABC" ; "ABCDEF" ) ) / 2 で、4.5 になります。
これを応用してみてください。

Offline

#3 2022-06-08 08:52:31

チポ
Member

Re: 半角全角混在フィールドの文字数のカウントについて

元のテキストを全て全角にしたもので元のテキストをFilterすると、
元のテキストの全角文字だけを取り出せます。

この文字数を元のテキストの文字数に加えると
全角を2、半角を1とした数値が得られます。

Offline

#4 2022-06-08 13:19:51

Shin
Member

Re: 半角全角混在フィールドの文字数のカウントについて

あぁ、そちらの方が簡単でしたね。
しばらくしなかったので、忘れていましjた。

Offline

#5 2022-06-09 18:23:30

きー
Guest

Re: 半角全角混在フィールドの文字数のカウントについて

チポさんのやり方ですと
どのような条件式になるのでしょうか?
他のソフトではバイト数を数えるという手法もあるみたいですね

単純にやるとすべてを全角に変換する計算フィールドを作りその文字数をカウント
と回りくどくなるところを、条件付き書式の計算値でスマートにできるということですよね?

#6 2022-06-10 09:05:55

チポ
Member

Re: 半角全角混在フィールドの文字数のカウントについて

条件付き書式のためには新たなフィールド不要です。

条件式に前記のロジックを計算式にすればいいのですが。。
使う関数は
  KanaZenkaku
  RomanZenkaku
  Filter
  Length
あと
  Self
これは必須ではありませんが、、

関数のヘルプのリンクです
https://help.claris.com/ja/pro-help/con … tions.html

Offline

#7 2022-06-10 13:43:44

Shin
Member

Re: 半角全角混在フィールドの文字数のカウントについて

バイト数を数える、という方法は、ひと昔前の方法です。ほとんどのアプリケーションが Unicode に対応してきていますが、Unicode では、半角文字1バイト、全角文字2〜4バイト です。
http://itdoc.hitachi.co.jp/manuals/3000 … 080450.HTM
ですから、バイト数を数える関数は、FM7 から廃止されています。

Offline

#8 2022-06-10 15:45:36

himadanee
Guest

Re: 半角全角混在フィールドの文字数のカウントについて

一昔前の方法、というのはSJISの時代ことで、その通りですが
1~4バイトなのは「Unicode では」じゃなくて「UTF-8では」でしょうね。しかも半角文字といっても半角カタカナは1バイトじゃありません。
FMの内部はUTF-16なので、半角文字もすべて2バイトです。(文字数=バイト数/2)(厳密には4バイトの文字もあると言った方がいいのかな)

最初のUnicodeは「すべての文字を2バイトで表す」意気込みでしたがすぐに破綻してずいぶん複雑になってしまいましたね。(これは個人の感想)

#9 2022-06-10 18:22:04

きー
Guest

Re: 半角全角混在フィールドの文字数のカウントについて

なかなか複雑になってしまったのですが
半角は2文字で1文字扱いとして10文字から書式を変更したいときにこうすればよいのでしょうか?

(Length (Filter ( フィールド ; RomanZenkaku ( KanaZenkaku ( フィールド  ) ) ))+(Length(フィールド ) - Length(Filter ( フィールド  ; RomanZenkaku ( KanaZenkaku ( フィールド  ) ) )))   / 2) ≥ 10

回りくどい記述で、もっと簡潔に書くことができるのでしょうか?
自分でもメンテナンスのときにパッと見て理解できる気がしません

#10 2022-06-10 19:11:03

Shin
Member

Re: 半角全角混在フィールドの文字数のカウントについて

UTFと書くつもりでUnicodeと書いてしまいました。すみません。

式は
Let (
    Zen = RomanZenkaku ( KanaZenkaku ( フィールド  ) ) ;
    Length ( フィールド ) + Length ( Filter ( フィールド ; Zen ) ) ≥ 20
)
が簡明でしょう。

または、外字とかがはいるとだめですが、sjis へエンコードして数える方法もいいかも
Length ( HexEncode ( TextEncode ( フィールド ; "shift_jis" ; 1 ) ) ) / 2

Last edited by Shin (2022-06-12 08:55:03)

Offline

#11 2022-06-13 10:27:59

チポ
Member

Re: 半角全角混在フィールドの文字数のカウントについて

Length ( フィールド & Filter ( フィールド ; RomanZenkaku ( KanaZenkaku ( フィールド ) ) ) ) ≥ 20
ちょっと短くなりました

Offline

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

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.006 seconds, 9 queries executed - Memory usage: 564.58 KiB (Peak: 578.95 KiB) ]