「なでしこv1」開発掲示板

なでしこv1のバグや要望を書き込む掲示板
[一覧へ] > (@613) [高] [解決]
@613■ (#1946) ワイルドカードパターンの異常 - AI (2011-11-20 04:35) /緊急 未処理
【症状】どのような症状、現象か?
カタカナの『ポ』以降の全てのカタカナに一致してしまう。

但し、*[=ポあああいいい]*の様な使い方をした時のみ
『ポ』のみでも一致する。
『ポ』の前迄が一致ならば、『ポ』以降は一致となる。

ちなみに、同条件において『ポ』以外の平仮名カタカナは全て問題ありませんでした。

追記
データ=『身』
データが`*[=酢]*`にワイルドカード一致を言う
これも一致してしまいます。

【再現方法】サンプルソース、再現手順など
データ=『アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヰヱヲン』
結果とは配列。
データを文字列分解して反復
 対象が`*[=ポ]*`にワイルドカード一致ならば結果に対象を配列追加
結果を言う

【要望】どのような解決が望ましいか?
一致しないように改善
ワイルドカード重要命令なので応急措置などの提案。

【バージョン】確認したバージョン
バージョン:1.5332

【その他】
現状の応急措置として、バグ発生条件においては、『ポ』や『酢』をパターン、データ共に代わりの文字に置換えてから処理する方法を取っています。
他にも同じ現象が無いかも気になります。

(#1947) バイナリ表現 - SWinX (2011-11-16 13:03) /緊急 未処理
「ポ酢」をバイナリダンプして表示。
→83,7C,90,7C
CHR($7C)を表示。
→|
Shift-JISの2バイト目に存在する"|"をメタ文字(または)
として認識しているようですね。

■ワイルドカードの書式
http://nadesi.com/doc/reference/function/2-2-wildcard.htm#head8

なでしこのワイルドカード処理はVB上位互換らしいですが
多バイト文字の扱いに問題があるのかもしれません。

■回避案(ユーザ)
2バイト文字の2バイト目に"|"($7c)を含む文字をワイルドカード条件に使わない

■おまけ:対象文字一覧 ※余計な文字も出ます

Cを$80から$FFまで繰り返す
 CHR(C*256+$7C)を継続表示
  もしC%16=15ならば、基本X=10。空を表示

(#1948) 助かりました - AI (2011-11-20 04:43) /高 未処理
原因の究明ありがとうございます。
おまけのコードを回避用に使わせていただきました。
ただ、問題のある文字を"?"に置き換えただけの急場しのぎです。

原因も解り回避策があることなので優先度は一つさげておきます。

(#1949) 7Cと似たケースがD5にも有るようです - うぇいく (2011-11-22 11:19) /高 未処理
ソースを見ていて、補足。
「[=」の形式のパターンについて、OR記号の「|」を検索する時のほかに、終端の「]」を検索する時にも同じ問題が有るようです。
「]」の文字コードはSJISでは$D5になりますので、$7Cとあわせて、ご注意ください。
手持ちのバージョンで再現するかどうかは、以下のコードで確認できます。「あいうえお」は「う」を含んでいるので表示されるはずですが、変な場合は表示されません(「ゾ」の2bytes目で[]が閉じてしまうため)
-----
Aは「あいうえお」。
パターンは「*[=ゾ|う]*」。
Aをパターンでワイルドカード一致。
もし、それがはいならば、Aを表示。
-----
どうも、wildcard.pasの、TWKakko.Createの内部のgetSelectListにて、getTokenChW()を使って検索しているのがうまくないようです。wildcard2.pasは正しいような。

(#1964) 修正箇所の訂正 - うぇいく (2012-04-10 10:19) /高 未処理
以前見当をつけていたwildcard.pasはこの件では外れだったようです。
hi_unit\wildcard2.pasの1090付近を以下のようにして、LeadBytesによる処理を追加するとよいようです。
----------------------------
        if p^ = ']' then
        begin
          Break;
        end;
        if p^ in LeadBytes then
        begin
          s := s + p^;
          Inc(p);
        end;
        s := s + p^;
        Inc(p);
----------------------------

(#1982) 修正 - クジラ飛行机 (2012-04-22 16:19) /高 確認待ち
- ワイルドカード系の命令でマッチが間違う問題を修正(@613)(r260)
うぇいくさんに感謝!



(#1993) 配布パッケージ中のnakostr.dllは更新されてないようです - うぇいく (2012-05-02 22:46) /高 確認待ち
 確認してみようとしたのですが、配布パッケージに新しいnakostr.dllが含まれていないような気がします(タイムスタンプが4/8)
本サイトの「(1)ZIPファイル版(最新版)」のところからダウンロードしました。
(リポジトリから直接checkoutしたソース(rev 263)ではうまく動作することを確認できました。)

(#2023) 解決 - AI (2012-07-16 05:00) /高 解決
SWinXさま、うぇいくさま、クジラ飛行机さまありがとうございます。
2012/07/14 version 1.53352にて(通常版・デラックス版)共に正しく動作確認が取れました。

(#1946)へ返信する:

👆お手数ですが、いたずら防止のために、「真夏」の読み方を記入してください。

編集時に使うキーを入力(省略可能)

画像ファイル(最大300KB)を添付可能