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

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

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

You are not logged in.

Announcement

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


#1 2015-02-14 01:55:56

NeuPed
Guest

フィールド内の無駄な改行の削除

フィールド内の先頭や末尾、途中に無駄に出来てしまった改行を削除するような関数はあるでしょうか?
無駄な改行とは次のような感じです。

[改行]
りんご
[改行]
[改行]
みかん
いちご
[改行]

以下のようなスクリプトを考えましたが、何かまどろっこしく、実は一発で変換できる関数があるのではと思った次第です。
よろしくお願いします。


変数を設定[$text; 値:""]
変数を設定[$n; 値:1]
Loop
  Exit Loop If[$n > ValueCount(フィールド)]
  If[Length(MiddleValues(フィールド;$n;1))>1]
    変数を設定[$text; 値:$text & MiddleValues(フィールド;$n;1)]
  End If
  変数を設定[$n; 値$n+1]
End Loop
フィールド設定[フィールド; Left($text;Length($text)-1)]

#2 2015-02-14 02:01:04

NeuPed
Guest

Re: フィールド内の無駄な改行の削除

当方の環境を書き忘れました。
Filemaker Pro 12 (Windows)です。

#3 2015-02-14 05:26:04

Hiro
Member

Re: フィールド内の無駄な改行の削除

多分、リストの行数が260位までならいける式、

Let([
   $lst=フィールド;
   $i=0;
   $res="";
   $fnc="Case(
      $i=ValueCount($lst); $res;
      Let([$i=$i+1;$res=List($res;GetValue($lst;$i))]; Evaluate($fnc))
      )"
];
   Evaluate($fnc)
)

Offline

#4 2015-02-14 11:18:01

NeuPed
Guest

Re: フィールド内の無駄な改行の削除

Hiroさんありがとうございます。
Let、Evaluateでやる方がきれいですね。
無駄な改行が増殖することがあり、知らないオリジナル関数で削除できるかもと思いましたがなさそうです。
List関数を使う方法は思いつきませんでした。
勉強になりました。

#5 2015-02-14 15:26:55

旅人
Member

Re: フィールド内の無駄な改行の削除

1発ではないけど分かりやすいのは
計算フィールド=GetValue (そのフィールド[1] ; Get (計算式繰り返し位置番号) )
を作って(レイアウトに無くてもいい)繰り返し設定を100位にしておけば
List(この計算フィールド)という計算式で全置換とかしてもいいかも。

Offline

#6 2015-02-14 17:42:47

NeuPed
Guest

Re: フィールド内の無駄な改行の削除

ありがとうございます。HiroさんのListの役割を勘違いしていましたが、値の結合に利用しているのですね。
ヘルプを見て、「<フィールド> 内の空白を除く値の連結一覧を改行で区切って返します。」と書いてあるので
空白(=改行だけの行)を無視して返してくれると思いましたが、しっかり残って返ってきます・・・。
繰り返しフィールドじゃないとダメなようでした。

#7 2015-02-14 17:57:20

wader
Member

Re: フィールド内の無駄な改行の削除

改行が2個以上続いてたら1個に変換する
Let ( [
$f="Case(PatternCount($s;\¶&\¶);Let($s=Substitute($s;\¶&\¶;\¶);Evaluate($f));$s)" ;
$s=t
];
Evaluate ( $f )
)

先頭と末尾は1個は残るので、別途処理が必要

Offline

#8 2015-02-14 18:35:51

とおりすがり
Guest

Re: フィールド内の無駄な改行の削除

wader wrote:

先頭と末尾は1個は残るので、別途処理が必要

えっ!先頭と末尾残ってもいいんだったら、

Substitute ( テキスト ; [ "¶¶" ; "¶" ] ; [ "¶¶" ; "¶" ] )

でよくない?

#9 2015-02-14 19:10:18

NeuPed
Guest

Re: フィールド内の無駄な改行の削除

皆様ありがとうございます。
当方の実用的には、空白の連続は2個まででなので、とおりすがりさんの方法でも問題ありません。
一般性を考えるとwaderさんのやり方は参考になりました。
どの方法も素晴らしい方法で勉強になりました。

元々はズボラなインポートとスクリプトでのデータ追加の際に空行が出来ることが多いので、
最初からその処理も行っておこうと思います。
一旦解決とさせていただきます。ありがとうございました。

#10 2015-02-15 09:21:14

wader
Member

Re: フィールド内の無駄な改行の削除

連続が2個までと決まってるなら、置換も1回でいいですよね。
Substitute ( テキスト ; [ "¶¶" ; "¶" ] )
2回かけば4個まで。
私のは、再帰で1回毎に半分にするから、再帰限界が200なら2^200個連続してても1個にできるはず。テキストフィールドが10億文字(約2^30)までなので、事実上無制限。

Offline

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

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.006 seconds, 9 queries executed - Memory usage: 517.79 KiB (Peak: 522.33 KiB) ]