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

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

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

You are not logged in.

Announcement

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


#1 2013-11-20 15:01:20

ちさ
Guest

あるフィールドの文字列を変数に1文字ずつ格納する方法

環境:FM12 Adv Win7

いつもお世話になっております。

氏名フィールドの内容を一時的に変数(繰り返し)に一文字ずつ格納したいと思っております。
この場合やはりloopで一文字ずつ変数に格納していくしか方法はございませんでしょうか?

もっとスマートな方法があればと思い質問させていただきました。

宜しくお願いいたします。

#2 2013-11-20 15:08:56

barikan
Guest

Re: あるフィールドの文字列を変数に1文字ずつ格納する方法

繰り返しフィールドを計算フィールドにして

Middle ( Extend ( 氏名フィールド ) ; Get ( 計算式繰り返し位置番号 ) ; 1 )

#3 2013-11-20 15:10:25

barikan
Guest

Re: あるフィールドの文字列を変数に1文字ずつ格納する方法

よく見たらフィールドじゃなくて変数だった…

#4 2013-11-20 15:27:44

himaganee
Guest

Re: あるフィールドの文字列を変数に1文字ずつ格納する方法

氏名なら大して長くないだろうから、
Let($i=0;
Evaluate(Substitute(10^Length(氏名)-1;9;"Let([$i=$i+1;$変数[$i]=Middle(氏名;$i;1)];0)+")&"0")
)

#5 2013-11-20 15:58:47

ちさ
Guest

Re: あるフィールドの文字列を変数に1文字ずつ格納する方法

barikan 様
ありがとうございます。
そうなんです。変数に格納したいと思っています。

himaganee 様
ありがとうございます。

himaganee wrote:

氏名なら大して長くないだろうから、
Let($i=0;
Evaluate(Substitute(10^Length(氏名)-1;9;"Let([$i=$i+1;$変数[$i]=Middle(氏名;$i;1)];0)+")&"0")
)

理解力がなくて申し訳ございません。
この式はどこで使用すればよろしいのでしょうか?
スクリプト「変数を設定」の値のところに記入すればよいのかと思ったのですが......
うまくいきませんでした。

宜しくお願いいたします。

#6 2013-11-20 16:15:08

himaganee
Guest

Re: あるフィールドの文字列を変数に1文字ずつ格納する方法

「変数を設定」の値のところでいいです。
$変数[]に入るので、そのステップの「名前」のところは別の名前にしてください。その変数は使いません。
何に使うのか書いてませんけど、$を$$にしてグローバル変数にしないと、スクリプト終了で変数は消えます。

#7 2013-11-20 17:13:08

himaganee
Guest

Re: あるフィールドの文字列を変数に1文字ずつ格納する方法

計算するだけでいいんで、変数を設定以外のところでもいいです。
「$$変数」にして、データビューアの「監視」で計算式を入れてみればわかるでしょう。
フィールド名(氏名)は手入力せずリストから選択してください。

#8 2013-11-20 17:23:30

ちさ
Guest

Re: あるフィールドの文字列を変数に1文字ずつ格納する方法

himaganee 様
ありがとうございます。

himaganee wrote:

「変数を設定」の値のところでいいです。
$変数[]に入るので、そのステップの「名前」のところは別の名前にしてください。その変数は使いません。
何に使うのか書いてませんけど、$を$$にしてグローバル変数にしないと、スクリプト終了で変数は消えます。

変数を設定 [$氏名;値:Let($i=0;Evaluate(Substitute(10^Length(tbl::氏名)-1;9;"Let([$i=$i+1;$氏名[$i]=Middle(tbl::氏名;$i;1)];0)+")&"0")

上記のようにしました。

$氏名[2]以降は正しくセットされましたが、
$氏名[1] のみ0がセットされてしまいます。

何か設定がおかしいでしょうか?
度々申し訳ございませんがよろしくお願いいたします。



ちなみに用途しては、正しいやり方かどうかわかりませんが、

<エントリーテーブル>
[個人番号],[氏名]....... (お預かりしたエントリーデータ。画像を見せて入力させている。マスタなどを使用していない。)
<マスタ>
[個人番号],[氏名]....... (当社で管理しているマスタ)

上記のようなテーブルがあったとします。
エントリーデータの[個人番号],[氏名]がマスタに存在するかチェックするときに
[個人番号]、[氏名]で検索していき、どちらともヒットしなかった場合
[氏名]を一文字ずつ分割し、分割した文字それぞれを含んだマスタ一覧を表示させ
正しい[個人番号],[氏名]を選択し修正したかったのです。

うまく伝わるといいのですが......説明下手で申し訳ございません。

#9 2013-11-20 21:18:08

wader
Member

Re: あるフィールドの文字列を変数に1文字ずつ格納する方法

「別の名前にして」ないからです。番号なしの$氏名は$氏名[1]と同じなので、計算式の結果(0)で上書きされてしまいます。

どうしても同じ名前で設定したければ、ちょっと変えて
Evaluate("Let([$i=0" & Substitute(10^Length(tbl::氏名)-1;9;";$i=$i+1;$氏名[$i]=Middle(tbl::氏名;$i;1)") & "];Left(tbl::氏名;1))")

Last edited by wader (2013-11-20 21:20:59)

Offline

#10 2013-11-21 09:43:20

himaganee
Guest

Re: あるフィールドの文字列を変数に1文字ずつ格納する方法

なるほどLetは1個でよかったのか。
それだと、$iの$iが要らなくなりますね。
tbl::氏名も変数に入れると少しすっきり?

>分割した文字それぞれを含んだマスタ一覧を表示
中田を田中と間違えて入れてても検索できるわけですね。ちょっと面白い。
でも、一度に変数に入れる必要あるのかな?1文字ずつ取り出して検索条件に設定するんではだめ?

#11 2013-11-21 12:46:54

ちさ
Guest

Re: あるフィールドの文字列を変数に1文字ずつ格納する方法

himaganee 様

ありがとうございます。
望んだ結果がえられました。

たしかに一文字ずつ取り出して検索条件に設定してもよかったですね。
しかし、今回教えて頂いたことはいろいろな事に応用できそうなので質問して良かったと思います。
感謝です。どうもありがとうございました。


wader 様

「別の名前にして」ないということがやっと理解できました。
望んだ結果がえられました。
wader 様の方法でも同じ結果を確認できました。
どうもありがとうございました。

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

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.008 seconds, 9 queries executed - Memory usage: 565.89 KiB (Peak: 581.33 KiB) ]