6 返信 最新の回答 日時: Sep 9, 2015 8:56 PM ユーザー:parc_box

    文字列の「識別」についての質問です。

    parc_box

      文字列の「識別」についての質問です。

       

       

      初期の頃、選択肢で「製造 + 出荷」という項目を作成してしまいました。

      これで数ヶ月、関数とかスクリプトとかを組み続けたので今更「製造 + 出荷」の選択肢を変更するのは結構な時間を取られるので避けたいです。

       

       

      他の選択肢は「製造 → 在庫」と「出荷」です。これらは全角文字しか使われてないです。

       

       

      これで「製造 → 在庫」と「出荷」は当方が希望するとおりの動作をしてくれるのですが「製造 + 出荷」だけが多分中に使ってる「+」(半角)が悪さをしてるみたいで、無反応です。

       

       

      組んだ計算式は以下のとおりです。

       

       

      Case (

      PatternCount ( 指示区分 ; "製造 → 在庫" ) ; "IM_000014" ;//←動作確認済み

      PatternCount ( 指示区分 ; "出荷" ) ; "IM_000016" ;//←動作確認済み

      PatternCount ( 指示区分 ; "製造 + 出荷" ) ; "IM_000015" ;//←反応せず

      PatternCount ( 指示区分 ; "どちらでもない(イレギュラー)" ) ; "IM_000017" ;//←動作確認済み

      )

       

       

      IM_0000**は外部ファイルにリレーションで画像を読みに行くための画像番号です。

      手元にある関数辞典では¥(バックスラッシュ)で演算子を文字列として扱うとありましたので──。

       

       

      PatternCount ( 指示区分 ; "製造" & "\+" & "出荷") ; "IM_000015" ;

       

       

      ──と試してみたのですが、無反応。

       

       

      PatternCount ( 指示区分 ; "製造 \+ 出荷") ; "IM_000015" ;

       

       

      ──コレもダメだろうなあと試してみましたが、やはりこれだけ無反応。

       

       

      何処が悪いのか教えて頂けますでしょうか……。

        • 1. Re: 文字列の「識別」についての質問です。
          user14047

          Case 関数は、上から順に評価するので、PatternCount ( 指示区分 ; "製造 + 出荷" ) の前に PatternCount ( 指示区分 ; "出荷" ) で、"製造 + 出荷" でヒットすべきものは、 全て "出荷" で評価されてしまいます。

          ですから、Case 内の条件の順番をいれかえてください。

          • 2. Re: 文字列の「識別」についての質問です。
            sago350@未来Switch

            原因はCace文の判定だと思いますが、

            そもそも、それだけしか入力されないのなら、PatternCountを使わなくてもいいのでは。

            Case (

            指示区分 = "製造 → 在庫" ; "IM_000014" ;

            指示区分 = "出荷" ; "IM_000016" ;//

            指示区分 = "製造 + 出荷" ; "IM_000015" ;

            指示区分 = "どちらでもない(イレギュラー)" ; "IM_000017" ;

            )

            • 3. Re: 文字列の「識別」についての質問です。
              parc_box

              ご回答ありがとうございます。

              早速下記内容に修正して試してみました。

               

               

              ▼1

              Case (

              PatternCount ( 指示区分 ; "製造 \+ 出荷" ) ; "IM_000015" ;

              PatternCount ( 指示区分 ; "製造 → 在庫" ) ; "IM_000014" ;

              PatternCount ( 指示区分 ; "出荷" ) ; "IM_000016" ;

              PatternCount ( 指示区分 ; "どちらでもない(イレギュラー)" ) ; "IM_000017" ;

              )

               

               

              これで、直るかなと試してみたところ先ほどと同じ現象でした。

              「製造 + 出荷」用の画像にだけ切り替わりません。

              ──で、「製造 + 出荷」に追加した\(バックスラッシュ)を外して、こちらもどうかな?と試してみました。

               

               

              ▼2

              Case (

              PatternCount ( 指示区分 ; "製造 + 出荷" ) ; "IM_000015" ;

              PatternCount ( 指示区分 ; "製造 → 在庫" ) ; "IM_000014" ;

              PatternCount ( 指示区分 ; "出荷" ) ; "IM_000016" ;

              PatternCount ( 指示区分 ; "どちらでもない(イレギュラー)" ) ; "IM_000017" ;

              )

               

               

              コチラでも「製造 + 出荷」だけを識別してくれませんでした。

              Case関数は上から順番に……という所を忘れてただけに「コレだ!」という感触を見た瞬間に感じただけに順番は折角教えて頂いた「上から順番」ってのを鑑み、▼2を維持させて、コチラも同じパターンの所を作りこみを進めながら考えを「なんでだろう?」と頭の中をゴネゴネこねくり回してみます。

              ありがとうございました。

              • 4. Re: 文字列の「識別」についての質問です。
                parc_box

                ありがとうございます。

                昨日の午後はその書き方で進めてたんです……。で、全部無反応だったわけです。

                今朝になってPatternCountを使ってみたら?という事を思いつき、さっきの内容に書き換えて「おっしゃ!一歩前進!」と反応し始めたのをいいコトに勢いづいてたのですが……。

                 

                 

                先ほどの方の返答も鑑み、順番にも気をつけて、sago35さんからの返答をヒントに下記内容で試してみました。

                 

                 

                Case (

                指示区分 = "製造 + 出荷" ; "IM_000015" ;

                指示区分 = "製造 → 在庫" ; "IM_000014" ;

                指示区分 = "出荷" ; "IM_000016" ;

                指示区分 = "どちらでもない(イレギュラー)" ; "IM_000017" ;

                )

                 

                 

                ──動きました。バッチリ全部切り替わってくれています。

                なんでという気持ちとどうせどこか間違えてたという気持ちがないまぜになって、声が出てしまいました。

                 

                 

                ありがとうございました。

                • 5. Re: 文字列の「識別」についての質問です。
                  user14047

                  そういう時は、ポップアップメニーやラジオボタンではなく普通のフィールドをレイアウト上において、どんな値が入っているか確認を。


                  = を条件にする場合は、無駄な改行記号が入らないように注意してください。チェックボックスの場合は改行区切りになっていますので。フィールド定義の自動入力で Substitute 使って改行取り除いておくといいかもしれません。


                  • 6. Re: 文字列の「識別」についての質問です。
                    parc_box

                    >普通のフィールドをレイアウト上において、どんな値が入っているか確認を。

                     

                     

                    それがですね、同じような事をやってて、今朝"Patterncount"を使ってみるまでは普通のフィールドに反映してた値は"0"だったのです。……で、計算式を外し、先に手入力で画像番号を入力して狙い通りにルックアップしたのを確認して、で今朝──という流れでした。

                     

                    >普通のフィールドをレイアウト上において、どんな値が入っているか確認を。

                     

                     

                    それがですね、同じような事をやってて、今朝"Patterncount"を使ってみるまでは普通のフィールドに反映した値は"0"だったのです。……で、計算式を外し、先に手入力で画像番号を入力して狙い通りにルックアップしたのを確認して──という流れでした。

                     

                     

                    >= を条件にする場合は、無駄な改行記号が入らないように注意してください。チェックボックスの場合は

                    >改行区切りになっていますので。フィールド定義の自動入力で Substitute 使って改行取り除いておくといいかもしれません。

                     

                     

                    便利そうですね。"Substitute"。これも覚えておくとラクになれそうです。ありがとうございます^^。