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

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

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

You are not logged in.

Announcement

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


#51 2022-08-16 08:06:56

koko009
Guest

Re: 全ての文字の間にスペースを挿入したい

今回の?が反る原因は、たぶんフィールドの文字数が少ない場合にだけ起きたことと思われます。
SetRecursion (
While (
[
    $text = recursive::text ;
   ・   
] ;
    t2  <> "" ;
[
    c = Left ( t2 ; 1 ) ; 
   ・                                                                                                  ・ 
] ;
   t1
);
Length ( $text ))
の「Length ( $text ))」部分で起きていました。
私の場合「Length ( recursive::a1 ))」使っていたのでそのまま書いていました。

#52 2022-08-16 09:04:29

koko009
Guest

Re: 全ての文字の間にスペースを挿入したい

いつも最初は12文字ぐらいで試していたが、再度「Length ( $text ))」では300000でも?が返り「Length ( recursive::a1 ))」にすれば問題なくテキストが返される文字数の問題は関係がない?

#53 2022-08-16 13:33:19

koko009
Guest

Re: 全ての文字の間にスペースを挿入したい

ローカル変数をグローバル変数にに変えると問題なく?ではなくテキストが返る
$text = recursive::a1;・・・Length ($text)
$$text = recursive::a1;・・・Length ($$text)
先に文字数の件については、
フィールドの文字種よりSetRecursion の値が小さい場合?が返される
ことと勘違いしていた・・・前に何を試していたか訳が分からなくなっていたので余計なことを書き込んで申し訳ありません。

#54 2022-08-18 12:06:30

koko009
Guest

Re: 全ての文字の間にスペースを挿入したい

グローバル変数に変えると問題が発生するのに気付いた。
SetRecursion (・・・Length ($$text))
では、ファイルを起動し最初に試すと?が返り再度試すとテキストが反る。

himadanee wrote:

普通の日本語なら使ってる文字はせいぜい3000種類とかだろうから

とあるように文字種の数が50000を超えないならばSetRecursion ()でwhileの上限を広げる必要はないのでグローバル変数に変える必要はないかも
但し、下記の場合ローカルでは駄目みたいだった・・・改行テキストでスペース有り→改行テキストで文字間のスペースは1個だけにする。
While (
[
$$text = TrimAll ( recursive::a1;3;3 );   
t2 =  $$text
];
  t2  <> "" ;
[
    c = Left ( t2 ; 1 ) ;
    $$text = Substitute ( $$text ; c ; c & " " ) ;
    t2 = Substitute ( t2 ; c ; "" )
] ;
  Substitute(Left($$text;Length ( $$text ) * 2 - 1);¶ & " ";¶)
)
途中ですが一応報告まで。

#55 2022-08-18 12:16:28

koko009
Guest

Re: 全ての文字の間にスペースを挿入したい

また間違えた計算式のタイプミスで別にグローバルにする必要はない
余計な書き込みだった。

#56 2022-08-18 13:03:32

koko009
Guest

Re: 全ての文字の間にスペースを挿入したい

どうでもいいことだけど、先程計算式を途中までで書き込んだので直しました。
While (
[
$text = TrimAll ( recursive::a1;3;3 );   
t2 =  $text
];
  t2  <> "" ;
[
    c = Left ( t2 ; 1 ) ;
    $text = Substitute ( $text ; c ; c & " " ) ;
    t2 = Substitute ( t2 ; c ; "" )
] ;
Left(Substitute($text;" " & ¶ & " ";¶);Length ( Substitute($text;" " & ¶ & " ";¶))-1))

#57 2022-08-20 03:30:59

koko009
Guest

Re: 全ての文字の間にスペースを挿入したい

初歩的な勘違いにようやく気付いた
変数を初期値で
SetRecursion (while[ = recursive::a1;・・・]・・・Length ($text))
の形で使用すればSetRecursionで使う変数に最初に何も指定されていないことになりあとのwhile内での$textで指定されても反映されないことになる、だからグローバルにすれば最初のスクリプトで?で返っても、もう一度同じスクリプトを実行すればテキストが返る。もし変数をSetRecursionで敢えて使用するとするならば下記のようにLet式にすれば?は返ってきません。
Let(
$text = recursive::a1;
SetRecursion (
While (
[
t1 = Substitute ( $text ; " " ; "  " ) ;
t2 = Substitute ( $text ; " " ; "" );
i = 1];
i   < 30;
[
c = Left ( t2 ; 1 ) ;
t1 = Substitute ( t1 ; c ; c & " " ) ;
t2 = Substitute ( t2 ; c ; "" );
i = i + 1
] ;
t1
);
Length ( $text )))
本当に余計な投稿を繰り返し誠に申し訳ありませんでした。

#58 2022-08-20 08:56:55

himadanee
Guest

Re: 全ての文字の間にスペースを挿入したい

ああ、なるほど、そこの問題でしたか。
私の最初の#39がそういう書き方になってしまってますね。$textはスクリプトの前のステップで設定している(フィールド値だったり、計算式だったり)ので、気づきませんでした。
別件で修正した#41では式の中に$textの設定がなくなって、そのことは暗示されてるのですが、それで「不完全」に見えますね。

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

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.032 seconds, 7 queries executed - Memory usage: 517.84 KiB (Peak: 522.38 KiB) ]