3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

FileMakerAdvent Calendar 2019

Day 21

FileMakerでフィールド内のひらがな・カタカナを判定する・カウントする

Last updated at Posted at 2019-12-20

#概要

FileMakerでフィールド内の漢字を判定する・漢字をカウントする
のおまけです.こちらは簡単なのでさらっとやります.

日本語を取り扱ううえで外せないのが「ひらがな」「カタカナ」です.FileMakerにはHiragana関数,Katakana関数がありますが,これらはひらがな←→カタカナの相互変換を意図したもので,文字コードとして判定したり,カウントしたりすることはできません.その部分を補うものです.
(計算フィールド編は省略します.カスタム関数を参考に,引数Textを,テキストフィールドに置き換えて使用して下さい.)

##ひらがな判定の部
説明:テキストの中にひらがなが1つでも含まれていれば1を,そうでなければ0を返します.

####ひらがな判定のカスタム関数 While関数版(FileMaker18以降)
文字列の長さに制限があり,約5万字までです.

**While関数版のカスタム関数:ContainsHiragana(Text)**
Let ( [
	txt = Text ;
	len = Length(txt)
	] ; 
		While ( 
				[ i = 1 ; flg = 0 ] ;								//初期変数
					 i   ≤  len  and flg = 0 ;					//条件.最後の文字まで行くか,またはひらがなが1文字でも見つかれば終了
								[
								tp = Middle( txt ; i ; 1);
								code = Code(tp) ;
								flg = flg or Case(
													( code ≥ 12353 and code ≤ 12438)
														; 1 ; 0) ; 
								i = i + 1
				] ;												//ロジック
			flg												//結果
			)
     )

####ひらがな判定のカスタム関数 Let関数版(FileMaker17までの場合)
文字列の長さに制限があり,約294字までです.

**Let関数版のカスタム関数:ContainsHiragana(Text)**

Let([
		txt = Text;
		len = Length(txt);
		pos = 0;
		tp = Middle(txt;pos;1);
		code = Code(tp);
		i = 0;
		res = "";
		fnc ="																/*fnc開始*/
			 Case( pos > len or res = 1 ; res;							/*Case文開始.終了条件:最後の文字まで行くか,またはひらがなが1文字でも見つかれば終了*/
					Let([													/*内側のLet開始*/
						pos = pos + 1;
						tp = Middle( txt ; pos ; 1);						/*pos番目の文字を取得*/
						code = Code(tp);   								/*pos番目の文字のコードを取得*/
						res = If ( code ≥ 12353 and code ≤ 12438
						; 1 ; 0 )											/*コード判定*/ 
						]; 
						Evaluate(fnc))										/*内側のLet終了,内側のfnc計算*/
					)														/*Case文終了*/
			"																/*fnc終了*/
	];
		Evaluate(fnc)
																			/*外側のfnc計算*/
)																			/*外側のLet終了*/

##ひらがなカウントの部
説明:テキストフィールド中のひらがなの数を返します.

####ひらがなカウントのカスタム関数 While関数版(FileMaker18以降)
文字列の長さに制限があり,約5万字までです.

**While関数版のカスタム関数:CountHiragana(Text)**
Let ( [
		txt = Text ;
		len = Length(txt) ;
		num = 0 
		] ; 
		While ( 
				[ i = 1 ] ;									//初期変数
					 i   ≤  len ;							//条件
								[ 
								tp = Middle(txt ; i ; 1);
								code = Code(tp);
								i = i + 1 ;
								num = num + If ( 
												 ( code ≥ 12353 and code ≤ 12438)
												; 1 ; 0 )
								] ;							//ロジック
				 num 										//結果
				)
 )

####ひらがなカウントのカスタム関数 Let関数版(FileMaker17までの場合)
文字列の長さに制限があり,約294字までです.

**Let関数版のカスタム関数:CountHiragana(Text)**

Let([
	txt=Text;
	num = 0 ;															/*ひらがなの個数*/
	fnc="Case ( IsEmpty ( txt ) ; num ;								/*fnc開始.終了条件:最後の文字まで判定したらnumを返す*/
				Let([													/*内側のLet開始*/
					tp = left ( txt ; 1) ;
					code = Code ( tp ) ;
					num = num + ( code ≥ 12353 and code ≤ 12438 ) ;
					txt = right ( txt ; length ( txt ) - 1)
					]; Evaluate ( fnc ) 								/*内側のfnc終了*/
					)
				)"
	];
	Evaluate(fnc)														/*外側のfnc計算*/
	)

##カタカナ判定の部
説明:テキストの中にカタカナが1つでも含まれていれば1を,そうでなければ0を返します.

####カタカナ判定のカスタム関数 While関数版(FileMaker18以降)
文字列の長さに制限があり,約5万字までです.

**While関数版のカスタム関数:ContainsKatakana(Text)**
Let ( [
		txt = Text ;
		len = Length(txt)
		] ; 
			While ( 
					[ i = 1 ; flg = 0 ] ;								//初期変数
						i ≤ len  and flg = 0 ;						//終了条件:最後の文字まで行くか,またはカタカナが1文字でも見つかれば終了
								[
								tp = Middle( txt ; i ; 1);
								code = Code( tp ) ;
								flg = flg or Case(
													( code ≥ 12448 and code ≤ 12543)
													; 1 ; 0) ; 
								i = i + 1
								] ;										//ロジック
			flg														//結果
			)
     )

####カタカナ判定のカスタム関数 Let関数版(FileMaker17までの場合)
文字列の長さに制限があり,約294字までです.

**Let関数版のカスタム関数:ContainsKatakana(Text)**
Let([
		txt = Text ;
		len = Length(txt);
		pos = 0;
		tp = Middle(txt;pos;1);
		code = Code(tp);
		i = 0;
		res = "";
		fnc ="																/*fnc開始*/
			 Case( pos > len or res = 1 ; res;							/*Case文開始.終了条件:最後の文字まで行くか,またはカタカナが1文字でも見つかれば終了*/
					Let([													/*内側のLet開始*/
						pos = pos + 1;
						tp = Middle( txt ; pos ; 1);						/*pos番目の文字を取得*/
						code = Code(tp);   								/*pos番目の文字のコードを取得*/
						res = If ( code ≥ 12448 and code ≤ 12543
						; 1 ; 0 )											/*コード判定*/ 
						]; 
						Evaluate(fnc))										/*内側のLet終了,内側のfnc計算*/
					)														/*Case文終了*/
			"																/*fnc終了*/
	];
		Evaluate(fnc)
																			/*外側のfnc計算*/
)																			/*外側のLet終了*/

##カタカナカウントの部
説明:テキストフィールド中のカタカナの数を返します.

####カタカナカウントのカスタム関数 While関数版(FileMaker18以降)
文字列の長さに制限があり,約5万字までです.

**While関数版のカスタム関数:CountKatakana(Text)**
Let ( [
		txt=Text ;
		len=Length(txt) ;
		num = 0 

		] ; 
		While ( 
				[ i = 1 ] ;									//初期変数
					 i   ≤  len ;							//条件
								[ 
								tp = Middle(txt ; i ; 1);
								code = Code(tp);
								i = i + 1 ;
								num = num +If ( 
												 ( code ≥ 12448 and code ≤ 12543 )
												; 1 ; 0 )
								] ;							//ロジック
				 num 										//結果
				)
	)

####カタカナカウントのカスタム関数 Let関数版(FileMaker17までの場合)
文字列の長さに制限があり,約294字までです.

**Let関数版のカスタム関数:CountKatakana(Text)**

Let([
	txt=Text;
	num = 0 ;															/*カタカナの個数*/
	fnc="Case ( IsEmpty ( txt ) ; num ;								/*fnc開始.終了条件:最後の文字まで判定したらnumを返す*/
				Let([													/*内側のLet開始*/
					tp = left ( txt ; 1) ;
					code = Code ( tp ) ;
					num = num + ( code ≥ 12448 and code ≤ 12543 ) ;
					txt = right ( txt ; length ( txt ) - 1)
					]; Evaluate ( fnc ) 								/*内側のfnc終了*/
					)
				)"
	];
	Evaluate(fnc)														/*外側のfnc計算*/
	)

解説

ひらがなとみなしているのは,全角ひらがなだけです.
ひらがな=【ぁあぃいぅうぇえぉおかがきぎくぐけげこごさざしじすずせぜそぞただちぢっつづてでとどなにぬねのはばぱひびぴふぶぷへべぺほぼぽまみむめもゃやゅゆょよらりるれろゎわゐゑをん】

文字コードの範囲は16進数で,3041から,309Fまでをひらがなとしています.
「・」 (中黒,中点)や,「ー」(音引き,長音)はひらがなではなくカタカナとして分類している点に注意して下さい.例:CountHiragana("あーあ")=2,となります.

カタカナとみなしているのは,全角のカタカナだけです.
カタカナ=【゠ァアィイゥウェエォオカガキギクグケゲコゴサザシジスズセゼソゾタダチヂッツヅテデトドナニヌネノハバパヒビピフブプヘベペホボポマミムメモャヤュユョヨラリルレロヮワヰヱヲンヴヵヶヷヸヹヺ・ーヽヾヿ】
文字コードの範囲は16進数で,30A0から,30FFまでをカタカナとしています.
以下の文字を含んでいる点に注意して下さい.

30FB ・ 中黒,中点
30FC ー 音引き,長音
30FD ヽ片仮名繰返し記号
30FE ヾ片仮名繰返し記号(濁点)
30FF ヿ(こと)

この辺りも,「どこまでをひらがな・カタカナとみなすか」は意見の分かれるところでしょうが,あくまでUnicodeのブロック名で分けています.適宜,計算式の部分を変更して使って下さい.

漢字・ひらがな・カタカナを使いこなして、楽しいFileMakerライフを!

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?