Skip to main content
Announcements
Qlik Connect 2024! Seize endless possibilities! LEARN MORE
cancel
Showing results for 
Search instead for 
Did you mean: 
chakiw5
Contributor III
Contributor III

正規化表現による検索の方法について

お世話になります、いろいろ試したのですが良い方法が浮かびません。

お知恵拝借お願いします。

いろいろな入力をされたテキストがあり、それをある法則に従ってグループ化させたいと思っています。

VBScriptのモジュールにRegExpを設定して、テキストとパターンをモジュールに送るのですが

思ったような返り値になりません。

サンプルQVWを添付します。

検索したいテキストはtestで高1から高10まであり、パターンはnormalizeで4種類あります。

検索した結果のcategoryでグループ化したいと思います。

モジュール内でのテストでは正常に動作しています。

またロードスクリプト内でも関数へ直接パターンを書く場合はうまく行きますが、パターンを変数に

入れると動作がおかしいのでどうも渡し方が間違っているようです。

どうぞよろしくお願いします。

 

3 Replies
chakiw5
Contributor III
Contributor III
Author

本日も諦めきれずに朝からいろいろ行ったところ自己解決してしまいました。

結果として関数に変数を渡す際にドル記号展開していますが、それを単一引用符’’で括ると

正常な値が返ることがわかりました。(関数名は変えています)

let hit=RegExTest('$(p1)','$(p2)');

このドル記号展開を単一引用符で括るのは、今まで主にFor文の中でのLoadの際に変数から

値を取得する時に使っていました。

私もいろいろ調べていますが、このドル記号展開を単一引用符で括る意味を教えていただけないでしょうか。

よろしくお願いします。

kuya_japan
Contributor III
Contributor III

QlikViewでは、文字列を扱うときにはシングルクォーテーションで囲む必要があります。

※エクセルではダブルクォーテーションで囲むと文字列として扱われますが、それと同じです。

 

今回の場合、

『高一』という名前の変数/関数が使われてるとシステムが判断

→そんな変数/関数は無い

→エラー

になっていると思います。

 

適当なテキストオブジェクトを作って、

=Left('高一',1) と記述すると「高」 が返ってきますが、

 =Left(高一,1)  と記述するとエラー("-") が返ってきます。これと同じ現象が起こっているかと。

 

 

chakiw5
Contributor III
Contributor III
Author

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

確かにそのようですね。

今書籍のQlikView For Developersをの変数に部分を懸命に翻訳しているのですが、そこに以下のような記載がありました。

ただし、DSE が単独では効果がない場合もあります。変数の出力値がテキスト文字列の場合、テキスト値は数値で解釈できないため、ドル記号展開の結果は null または欠損値になるため、ドル記号拡張を単一引用符で囲むか、単にDSE を使用しないでください。 たとえば、次のようになります。

(DSE:Dollar Sign Expansion)

今後変数を使う場合には気をつけたいと思います。

しかしQlikViewは深すぎます。私にはまだまだ勉強することがてんこ盛りです。