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

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

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

You are not logged in.

Announcement

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


#1 2019-01-12 11:49:37

st-taka
Member

文字列をshift_jisに変換

お世話になっています。

文字列をshift_jisの文字列に変換する方法を教えてください。

例)
$a = "東京都"
$b = shift_jis に変換した文字列を代入

なお、このようにしたい目的は
windowsのアプリで AnsiString で扱っていた文字列の操作をfileMaker で行いたいためです。

よろしくお願いします。

Offline

#2 2019-01-12 12:34:44

gotani
Member

Re: 文字列をshift_jisに変換

TextEncode関数
目的 指定された文字エンコードと改行コードを使用してテキストからオブジェクトデータとしてテキストファイルを返します。
構文
TextEncode ( テキスト ; shift_jis ;1 )

でしょうか・・・

Offline

#3 2019-01-12 12:58:52

st-taka
Member

Re: 文字列をshift_jisに変換

ありがとうございます。

ご回答頂きました
TextEncode ( テキスト ; shift_jis ;1 )
の戻り値はオブジェクトのようで下記のように単純に代入すると
$a = "東京都"
$b = TextEncode( $a ; "shift_jis" ; 1)
とすると、
Length($b)とすると、文字数は6となり2倍なっていますが、
$bに代入されたものは ”sift_jis.txt” になります。
戻り値をテキストにしたのですが。。。

Offline

#4 2019-01-12 13:39:20

wader
Member

Re: 文字列をshift_jisに変換

FM内部のテキストはUTF-16で固定です。SJISにエンコードしたものはUTF-16でないバイナリなのでテキストではなくオブジェクトです。フィールドに入れてファイルにエクポートはできますが、FM内でテキストとして演算はできません。

Offline

#5 2019-01-12 13:48:14

Shin
Member

Re: 文字列をshift_jisに変換

> AnsiString で扱っていた文字列の操作
は、具体的にどのような操作でしょうか。

shift JIS での直接の文字列演算はできませんね。
バイト区切りで文字を取り出したいのでしたら、TextEncode( $a ; "shift_jis" ; 1) をさらに HexEncode() して演算、それをデコードする、という手段が手っ取り早いかもしれませんよ。

Last edited by Shin (2019-01-12 13:50:02)

Offline

#6 2019-01-12 15:12:30

st-taka
Member

Re: 文字列をshift_jisに変換

wader様 shin様

ありがとうございます。

>>

Shin wrote:

> AnsiString で扱っていた文字列の操作
>は、具体的にどのような操作でしょうか。

Strは文字列(ユーザー名)
nen,tukiは有効年月
次のような処理でパスワードを生成していたのです。
これをFMでカスタム函数としたいと思っていたのです。
---------------------
  ansiStr1:=Str;
  T:=0;
  L:=length(ansiStr1);
  for j:=1 to L do
  begin
    T:=T+Ord(ansiStr1[j]);
  end;
  T:=T*(nen+tuki*10+tuki);
  Fnumber := Sqrt(T);
  :
  :
---------------------

 
>shift JIS での直接の文字列演算はできませんね。
>バイト区切りで文字を取り出したいのでしたら、TextEncode( $a ; "shift_jis" ; 1) をさらに HexEncode() して演算、それをデコードする、という手段が手っ取り早いかもしれませんよ。

ご指導いただいた方法で試してみたいと思います。

Offline

#7 2019-01-13 16:56:59

st-taka
Member

Re: 文字列をshift_jisに変換

wader様
shin様

昨日は貴重なアドバイスを頂きまして大変ありがとうございました。
ご指導いただきました方法で
HexDecode() ⇒ {バイト単位の処理} ⇒ 有効期限つきのライセンスキーの発行
が無事できました。

感謝申し上げます。
今後ともどうぞよろしくお願いします。

Offline

#8 2019-01-13 17:39:26

Shin
Member

Re: 文字列をshift_jisに変換

再帰式を使って

Let (
[
	$txt = text ;
	$t = tuki ;
	$n = nen ;
	$012 = "0123456789ABCDEF" ;
	$000 = "0000" ;
	$ENC = "shift_jis" ;
	$cd = 0 ;
	$fnc =
		"Case ( 
 			IsEmpty ( $txt ) ; $cd ;
 			Let (
 			[
				chr = Left ( $txt ; 1 ) ;
				chr = HexEncode ( TextEncode ( chr ; $ENC ; 1 ) ) ;
				chr = Right ( $000 & chr ; 4 ) ;
				$cd = $cd
				  + ( Position ( $012 ; Middle ( chr ; 1 ; 1 ) ; 1 ; 1 ) - 1 ) * 16 ^ 3
				  + ( Position ( $012 ; Middle ( chr ; 2 ; 1 ) ; 1 ; 1 ) - 1 ) * 16 ^ 2
				  + ( Position ( $012 ; Middle ( chr ; 3 ; 1 ) ; 1 ; 1 ) - 1 ) * 16
				  + ( Position ( $012 ; Middle ( chr ; 4 ; 1 ) ; 1 ; 1 ) - 1 ) ;
				$txt = Middle ( $txt ; 2 ; Length ( $txt ) - 1 )
			] ;
				Evaluate ( $fnc )
			)
		)"
] ;
	Int ( Sqrt ( Evaluate ( $fnc ) * ( $n + $t * 10 + $t ) ) )
)

でいいのかも。(Hexの10進化も再帰にしてもいいでしょう)
検証してみてください。

Offline

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

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.007 seconds, 7 queries executed - Memory usage: 566.2 KiB (Peak: 586.62 KiB) ]