みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
お世話になっております。
この掲示板をいつも拝見し参考にさせていただいております。
とても簡単なことかもしれないのですが
タイトルのとおりのことが出来ずに仕事が遅くなっています。
このフィールドには、数字を入れてください、と言っているにもかかわらず
年配の社員がめんどうだからと省略して入れてしまうのです。
具体的には1から5までの数字を入れるところ、
「1-5」のように入れてしまいます。
本当は「1/2/3/4/5」と入れてほしいのですが・・・
この「1-5」を「1/2/3/4/5」に変換するような計算式はあるのでしょうか?
ただ、実際の入力はもうちょっと込み入っていて
「1 2 3 5 6 7 8」を「1-3/5-8」と略したり
「2 5 6 7 9 10 11 70」を「2/5-7/9-11/70」と略したりします。
つまり、数字の区切りを/にするのは守ってもらえるのですが、
数字が連続するなら-で繋いでしまうということなのです。
その入力に規則性はあります?
無ければファイルメーカーに限らずパソコンでは実現できないですよ。
・数字ごとに / で区切る
例:4と11と52なら 4/11/52
・連続する数字は最初と最後の間を - でつなぐ
例 5と6と7なら 5-7
という規則性はありますので、
その組み合わせで
「2 5 6 7 9 10 11 70」が「2/5-7/9-11/70」になる、という具合なんです。
どっちにしたいんです?
連続は 1-3とハイフン(-)で繋ぐんですか?それとも 1/2/3とするんですか?
>2 5 6 7 9 10 11 70」が「2/5-7/9-11/70」
は左が入力で 右が結果?
この辺りをはっきりしてほしい
Offline
> 本当は「1/2/3/4/5」と入れてほしい
って書いてありますよ。
これは正規表現での書き方で、しっかり法則性も有ります。書いている人,結構ベテランの方でしょう。
一文字ずつ評価していき,- が見つかれば,その直前の数字に続いて "/" と1加えた数字を挟んでいき、その後の数字と同じになればその数字と "-" を削除,という事を繰り返していけば良いでしょうね。
Offline
Shinさんの書かれていることは理解してます。
しかし、
>「2 5 6 7 9 10 11 70」が「2/5-7/9-11/70」になる、という具合なんです。
とかかれると、ん??ということに
申し訳ない
私は 正規表現 全く理解していない人間なので。
Last edited by シャチ (2017-02-25 19:45:35)
Offline
ああ・・・!
すみません
規則性と言われたもので、「ユーザーが入力してしまう規則性」を答えていました。
--------------------------------------------------------------------------------
連続した数字は、ユーザーが「1-3」とハイフンで繋いでしまっているので
これを「1/2/3」のようにスラッシュ区切りに変換したい、
ということなんです。
--------------------------------------------------------------------------------
「2 5 6 7 9 10 11 70」←これがユーザーに入力させたい元々の希望だったのですが
「2/5/6/7/9/10/11/70」←このようなスラッシュ区切りとの相互変換は容易なので、スラッシュ区切りでも良い、
という意味だったのですが説明が下手ですみません・・・
それだったら、/が規則性があるからそれをスペースで区切ればいいだけでは?
でもそんな感じではなさそうだなあ。
ユーザーって自分勝手に入力するからね。
すみません。ユーザーの方。
はっきりしてもらっている間に
こんなんですかという
サンプルを
http://yahoo.jp/box/bEonoX
におきました。
スクリプロトリガ使ってます。
結果は、/(スラッシュ)でつないでますが
/ を"_" 半角スペースにおきかえることも簡単です。
Last edited by シャチ (2017-02-25 19:50:29)
Offline
・数値と範囲数値指定は「/」で必ず区切られていること
・範囲始点と終点は「-」で必ず区切られていること
以上を前提条件として、2段入れ子のループ式から算出する方法、
例)データ「2/5-7/9-11/70」 → 変換「2/5/6/7/9/10/11/70」
Let([
//初期設定
$txt=あるフィールド;
$lst=Substitute($txt; ["/";¶]);
$n=0;
$rsl="";
//メインループ式定義(「/」で区切りのリストにして1行づつ精査する式)
$fnc="Case($n=ValueCount($lst); Substitute($rsl; [\"\¶\"; \"/\"]);
Let([
$n=$n+1;
$itm=GetValue($lst;$n);
$add=Case(PatternCount($itm;\"-\")=0; $itm;
Let([
$str=Substitute($itm; [\"-\";\"\¶\"]);
$end=GetValue($str;2);
$str=GetValue($str;1);
$res=\"\"
]; Evaluate($sub))
);
$rsl=List($rsl; $add)
]; Evaluate($fnc))
)";
//サブループ式定義(「1-5」を「1¶2¶3¶4¶5」リストに変換する式)
$sub="Case($str*1>$end*1; $res;
Let([
$res=List($res;$str);
$str=$str+1
]; Evaluate($sub))
)"
];
//上記定義したループ式を実行、答を得る
Case(PatternCount($txt;"-"); Evaluate($fnc); $txt)
)
Last edited by Hiro (2017-02-27 10:59:55)
Offline
Hiroさんと同じ条件で。
- が出てくれば、その前後の数字をみて、左側の数字を1ずつ加算していき、右との差が1になれば / があると看做して展開する方法。
Let(
[
$t = Substitute ( テキスト ;[ "/" ; "¶/¶" ];[ "-" ; "¶-¶" ]) ; // 変換元
$res = "" ;
$sl = "/" ;
$ds = "-" ;
$fnc =
"Case (
/* Last */
ValueCount ( $t ) = 1 ; List ( $res ; $t ) ;
/* n/m */
GetValue ( $t ; 2 ) = $sl ;
Let(
[
$res = List ( $res ; GetValue ( $t ; 1 ) ; GetValue ( $t ; 2 ) ) ;
$t = MiddleValues ( $t ; 3 ; ValueCount ( $t ) - 2 )
] ; Evaluate ( $fnc ) ) ;
/* n-n+1 */
GetValue ( $t ; 2 ) = $ds and GetValue ( $t ; 1 ) + 1 = GetValue ( $t ; 3 ) ;
Let(
[
$res = List ( $res ; GetValue ( $t ; 1 ) ; $sl ) ;
$t = MiddleValues ( $t ; 3 ; ValueCount ( $t ) - 2 )
] ; Evaluate ( $fnc ) ) ;
/* n-m */
GetValue ( $t ; 2 ) = $ds ;
Let(
[
$res = List ( $res ; GetValue ( $t ; 1 ) ; $sl ) ;
$t = ( GetValue ( $t ; 1 ) + 1 ) & \¶ & MiddleValues ( $t ; 2 ; ValueCount ( $t ) - 1 )
] ; Evaluate ( $fnc ) )
)"
] ;
Substitute ( Evaluate ( $fnc ) ; ¶ ; "" )
)結果で / の数が260くらいまでなら計算できるはずです。
https://www.dropbox.com/s/0qipydtoa3bao … 2.zip?dl=0
Last edited by Shin (2017-02-25 21:55:44)
Offline
Shinさんの上げているダウンローダーって普通の人じゃ解りにくくないですか?
普通のダウンローダーにしてもらえませんか?
普通の、という意味は? 圧縮しているから?
今まで公開したサンプルファイルは、1000をはるかに超えています。ローカルで管理しながら公開出来ていて、そのすべてが今でもダウンロードできます。以前は iDisk 使っていたけど終了したので引っ越し、DropBox以外ではその管理は無理との判断ですが。特に、そのサービスが終了した時に、次へファイルの引っ越しが出来る事が必須。これらの条件を満たす所がほかにあれば紹介してください。どこのダウンローダーにも癖があると思うけど。特に、期限付きのものは最悪。
Last edited by Shin (2017-02-26 00:01:38)
Offline
Shinさん、お気に障ったらゴメンなさい。
シャチさんのなんかすぐにダウンロードできますよ。
自分がダウンローダー用意出来れば一番いいのですが。
出来ませんので。
横から失礼いたします。
このサイトで、勉強させていただいる者です。
私は、
Shin 様の、・・云々は、全く問題なしと思います。
この、サイトは、
Shin 様
Hiro 様、
チポ 様、
シャチ 様
・・・・・・・・・・無くして、有り得ません。
ダウンローダー云々は、よく分かりませんが、
個人的には、
今まで、Shin 様の投稿での問題は、皆無です(他の知人等からも聞いたことはありません)。
故に、
このような、
Shin 様の、
厚意を踏みにじるような投稿は如何なものかと存じます。
(わざわざ、私ども素人のために、貴重な時間を割いて頂いておりますことを、少なくとも勘案すべきと思います。)
これからも気持ちよく拝見できるサイトであってほしいと願っております。
どうぞ宜しくお願い申し上げます。
私も
Shin 様
Hiro 様、
チポ 様、
シャチ 様
はリスペクトしておりますよ。
ただ、意見を言っただけです。
この人たちの貢献度が高すぎるから何でもかんでも意見を言えない掲示板ってどうなんでしょうかねえ。
この人たちがいるから解決している問題が多数、いえ大多数なのは知っていますが。
神格化するのは気持ち悪いね。
わかりにくいというのは、リンクをクリックしたときにDropBoxがサインインか登録を求めるからでしょう。(たぶん本人または登録済の人が試すとサインイン状態なのででてこない)
一番下に「今はやめておく」リンクがあって、それをクリックすれば「普通」にダウンロードできますね。
シャチさんのなんかすぐにダウンロードできますよ。
私はyahooBoxを使ってますが
あるメンバーからダウンロードできないと言われたことがあります
理由はわかりません。
その時は他のサイトをいっとき臨時に使いました
人によって、環境によって
うまくいかないこともあると思います
Offline
シャチさん、そんなこともあるんですね。
自分の環境だけが全てではないとシャチさんの発言で考えさせられました。
Shinさん、ごめんなさい。
私の発言は無視して、これからもいつものように的確な回答をお願い致します。
失礼致しました。
それでは、本題をどうぞ。
面白い試みですね・・・
ただHiroさんの方法だと、数字をハイフンで繋いだとき、レコードが増えるとバグってしまいませんか?
私の環境(windows)だと、その後レコードを削除しても状況は改善しませんでした。
どんな表示になるかは再現性がちょっと不明確なので申し訳ないのですが
とりあえず「44-46」って入れるとこうなってしまいました。
44
45
44
45
44
45
44
45
44
45
44
45
44
45
44
45
44
45
44
45
44
45
44
45
44
45
44
45
44
45
44
45
44
45
44
45
44
45
44
45
44
45
44
45
44
45
44
45
46
44
45
46
44
45
46
44
45
46
47
48
44
45
46
47
48
44
45
46
47
48
44
45
46
47
48
44
45
46
47
48
44
45
46
44
45
46
44
45
46
44
45
46
44
45
46
44
45
46
Offline
> レコードが増えるとバグってしまいませんか?
提示式とレコード数との関連性が分りません。
取り合えず試しに、レコードを400個複製して一覧表示を試しましたが、問題ありませんでした。
問題の再現ができませんので、そちらの問題ファイルをどこかへアップしてもらえますか?
Offline
こちらにアップしました。
https://srv19.bitsend.jp/download/fc020 … 7f176.html
Shinさんがアップされていたファイルに、計算フィールドを追加してHiroさんの計算式を設定したものです。
再度確認したところ、フィールド内をクリックするたびに行数が増えていく・・・
というよくわからないことになっていました。
前回ここに貼り付けた行数が長かったのは、なんどかクリックしていたからかもしれません。
Offline
Shinさんの式は初期値設定があるけど
Hiroさんのないですね
わたしが前に危惧していた
変数のクリアの問題ではないですか?
Offline
Hiroさんの式も、しっかり初期設定できています。
6行目の
$rsl="";
が抜けていますよ。
ちょっと興味があって大きな数で展開させてみたんですが、
Hiroさんの式は、1-281 でエラーに、私の式は、1-283 でエラーになります。
また、どちらも、1-3/4-283 でエラーになり、
それぞれ、1-3/4-6/7-285、1-3/4-6/7-283 でエラーになりました。
その辺りがスタックの限界なんでしょう。Hiro さんの式は、/ が増えると2増えていきますので、理論通りです。
Last edited by Shin (2017-03-31 17:40:58)
Offline
Hiroさんの式も、しっかり初期設定できています。
6行目の
$rsl="";
が抜けていますよ。
見落としました。失礼しました。
Hiroさんの式は、1-281 でエラーに、私の式は、1-283 でエラーになります。
また、どちらも、1-3/4-283 でエラーになり、
それぞれ、1-3/4-6/7-285、1-3/4-6/7-283 でエラーになりました。
画面のフィールドは?だけど フィールドクリックすると結果でてますね。
なんで?
どうも、このEvaluateの再帰は苦手だなぁ。
Offline
[ Generated in 0.011 seconds, 9 queries executed - Memory usage: 632.66 KiB (Peak: 665.57 KiB) ]