▼ たてぐや@ガリガリ中さん
>
> 実際、テキスト処理に関しては弱いというか関数が少ないですね。
> BASICのRIGHT$とかMID$に当たる関数は自作して使っています。でな
> いとコードが汚く長くなってしまいます。
> 正規表現が使えるといろいろできそうな気がします。Delphi6でも
> 正規表現は関数を書けば実現できるのは解っているのですが、なかな
> か書き始める気になりません。
>
そうですね。付属のVB関数もどきは、欠陥がありますからね
自作の方が安心ですね。
とりあえず、VBもどき関数のまとめ。
関数
Visual Basic Delphi(StrUtilsユニット)
Left LeftStr , AnsiLeftStr
Mid MidStr , AnsiMidStr
Right RightStr, AnsiRightStr
LeftB LeftBStr
MidB MidBStr
RightB RightBStr
AnsiLeftStrは、LeftStrが呼び出されるようなので結果は同じです。
※Delphiの場合
【string型】
string型の文字列に対して、操作をする場合、
WideStringで自動変換をしてごまかしているようなので
正常でない文字列(#$0とか制御記号を含む場合やOSと文字コードが違う場合など)では、
データが破損・消失するとこがります。
この関数の何が問題かというと
勝手に自動型変換をつかって
文字列が破損しても例外が発生しない点です。
ヘルプの説明では、
string型は、自動型変換が介入することにふれていない。重大なミスがあります。
ソースで定義検索でつつく癖のない場合、きっと気がつかないでしょう。
怪しい場合は、バイト単位で処理するほうが無難です。
バイト単位の場合は、LeftBStr,MidBStr,RightBStr
【WideString型】
WideString型の文字列で宣言している場合は、正常に動作します。
|