ボーランド社が販売しているコンピュータプログラムのビジュアル開発ツールDelphiとC++Builderについてのページ
正規表現を使った文字列検索・操作をするためのコンポーネント2種類です。
指定された正規表現にマッチするテキストファイル中の行を見つけ、 指定されたイベントハンドラを呼び出します。
プログラミング言語AWKに実装されている文字列操作関数の中で、 正規表現を使うものをメソッドとして提供します。
UNIXオペレーティングシステムの egrep や nawk コマンドで使われている正規表現が使えます。
日本語(Shift JIS)に対応しており、2バイト文字を1文字として認識し、 正規表現の中でも使う事が出来ます。
ミ,,゚Д゚彡フサギコのフサフサDelphi談話室その11
106 :デフォルトの名無しさん :03/11/19 13:31
>>105
たとえば、
Text:='banana';
AWKStr1.RegExp:='(an)+';
AWKStr1.Sub('X',Text);
のコードの場合、ドキュメントでは変数Textに「bXa」が返ってくることに
なってるが、実際には「Xba」になって返ってくる。
つまり、変数Textの置換される文字列だけがゴッソリ消え、
置換する文字列がたんに先頭に連結されるだけになってしまう。
D6Personalにて検証済み。
KondoさんからSubメソッドが正常に動いているという情報を
いただいたので報告します。
Takefumi_Kondo 2004/01/17 09:48
題名:TAWKStr.Subメソッドのバグ情報 ですが
〜省略〜 ぼくは正常に動作しています。
D6Professionalです。もちろんD5Professionalでも正常です。
作者がDelphi6 personal editionで確認したところ、
Text:='banana';
AWKStr1.RegExp:='(an)+';
AWKStr1.Sub('X',Text);
では結果が誤った'Xba'になることを確認しました。
また、次のように'banana'をあらかじめCopyしておくと正しい結果'bXa'が得られました。
Text:= Copy('banana', 1, 6);
AWKStr1.RegExp:='(an)+';
AWKStr1.Sub('X',Text);
この結果を再現させるテストプロジェクト
を置いておきます。
作者はDelphi(Object Pascal)から離れて久しいので、
この原因を解明することができません。
昔は Text:='banana'として文字列定数を代入した文字列型の変数を変更してはいけなかったような気がするのですが、確かな事は忘れました。:-)
どなたか情報がありましたらお願い致します。
2004/1/24 Kondoさんがこの バグが発現しないように直したコンポーネントを公開してくださいましたので紹介します。 Kondoさんのコンポーネントを利用するには依然として拙作rexp017.lzh (69,462 bytes)が必要となります。
プログラミング言語AWKが持つ正規表現を使う関数群のDelphi版です。
正規表現を使った文字列探索/操作コンポーネント集 に含まれるTAWKStrコンポーネントの機能をグローバル関数群として提供します。