みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
お世話になっています。
文字列をshift_jisの文字列に変換する方法を教えてください。
例)
$a = "東京都"
$b = shift_jis に変換した文字列を代入
なお、このようにしたい目的は
windowsのアプリで AnsiString で扱っていた文字列の操作をfileMaker で行いたいためです。
よろしくお願いします。
Offline
TextEncode関数
目的 指定された文字エンコードと改行コードを使用してテキストからオブジェクトデータとしてテキストファイルを返します。
構文
TextEncode ( テキスト ; shift_jis ;1 )
でしょうか・・・
Offline
ありがとうございます。
ご回答頂きました
TextEncode ( テキスト ; shift_jis ;1 )
の戻り値はオブジェクトのようで下記のように単純に代入すると
$a = "東京都"
$b = TextEncode( $a ; "shift_jis" ; 1)
とすると、
Length($b)とすると、文字数は6となり2倍なっていますが、
$bに代入されたものは ”sift_jis.txt” になります。
戻り値をテキストにしたのですが。。。
Offline
FM内部のテキストはUTF-16で固定です。SJISにエンコードしたものはUTF-16でないバイナリなのでテキストではなくオブジェクトです。フィールドに入れてファイルにエクポートはできますが、FM内でテキストとして演算はできません。
Offline
> AnsiString で扱っていた文字列の操作
は、具体的にどのような操作でしょうか。
shift JIS での直接の文字列演算はできませんね。
バイト区切りで文字を取り出したいのでしたら、TextEncode( $a ; "shift_jis" ; 1) をさらに HexEncode() して演算、それをデコードする、という手段が手っ取り早いかもしれませんよ。
Last edited by Shin (2019-01-12 13:50:02)
Offline
wader様 shin様
ありがとうございます。
>>
> 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
wader様
shin様
昨日は貴重なアドバイスを頂きまして大変ありがとうございました。
ご指導いただきました方法で
HexDecode() ⇒ {バイト単位の処理} ⇒ 有効期限つきのライセンスキーの発行
が無事できました。
感謝申し上げます。
今後ともどうぞよろしくお願いします。
Offline
再帰式を使って
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
Pages: 1
[ Generated in 0.006 seconds, 9 queries executed - Memory usage: 562.04 KiB (Peak: 581.96 KiB) ]