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

なでしこv1のバグや要望を書き込む掲示板
[一覧へ] > (@745) [中] [確認待ち]
@745■ (#2355) 正規表現置換で置換対象が256の倍数のとき正しく動かない - クジラ飛行机 (2014-12-04 17:28) /中 未処理
【症状】どのような症状、現象か?

(@744)から分岐。
「正規表現置換」で置換対象が256の倍数のとき正しく動かない。

【再現方法】サンプルソース、再現手順など

===
正規表現置換で、ヒット数が(256の倍数)個ヒットすると
置換そのものがされませんでした

#----------------------------
A=「」
257回、Aに「あ」を追加
Aの「あ」を「い」に正規表現置換
それを言う # OK

A=「」
256回、Aに「あ」を追加
Aの「あ」を「い」に正規表現置換
それを言う # NG

A=「」
512回、Aに「あ」を追加
Aの「あ」を「い」に正規表現置換
それを言う # NG

#-------------
===

【要望】どのような解決が望ましいか?

修正する

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

1.544

【その他】


(#2360) Re: 正規表現置換で置換対象が256の倍数のとき正しく動かない - うぇいく (2014-12-06 22:13) /中 未処理
利用している、BRegExpのAPI、BSubStの宣言ミスのようです。
本来、関数の型はInteger(32bit整数)であり置換した回数を返しているものを、APIBooleanで宣言して受け取っていしまっているため、最下8bitが0の場合に、Falseと判断を間違えてしまうようです(DelphiだかPascalの仕様だった気が)

おそらく、参考にしたCのソースではBOOLを使っていたのを、そのままDelphiでBooleanにしてしまったのではないかと思います。
(WindowsのCのBOOLの場合、32bits幅すべてで0の場合だけFalseとして評価されます。なので、CのBOOLとしてなら、1回以上の置換の判定としてBOOLとして扱うのは間違いではありません)

なお、BTransとBSplitも数を返すようなので、256の倍数だと誤動作しそうです。
(BMatchは真偽っぽい。オフィシャルサイトのどのAPIも説明が見当たらないものの、サンプルソースがそうなっている。)

(#2362) (r331)で修正 - クジラ飛行机 (2014-12-08 23:24) /中 確認待ち
(r331)で修正。


(#2355)へ返信する:

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

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

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