2009-06-19 134 views
5

Embaracderoドキュメント"IsEmpty" methodsは文字列型のため、C++ Builderコードで正常に使用できました。Delphiで文字列 "IsEmpty"メソッドを使用できますか

WideString s; 

if (s.IsEmpty()) 
    .... 

私は、Delphiから同じことを試みたが、それをコンパイルすることができませんでした:

var s: WideString; 
begin 
    if s.IsEmpty then 
    .... 

私はあなたが空の文字列と比較し、または長さの関数を呼び出すことができます知っているが、それは可能ですDelphiからこのIsEmptyメソッドを呼び出すには?

EDIT:明らかにするために、これは文字列対Widestringの問題ではありませんでした。

基本的には、上のリンク先のドキュメントでは、パスカル構文とC++の構文について説明していますが、これはうまくいきません。私はこれがドキュメントの欠陥にすぎないと考えています。

System :: WideString :: WideStringが空の場合にtrueを返します。

パスカル:関数IsEmpty:bool;

+0

は、C++の実装はどのようなものが見えますか? –

+1

WideString対文字列の問題だとは思わないかもしれませんが、それはそうです。 –

+0

@Craig - 質問には文字列は含まれず、WideStringだけが含まれるべきです。あなたは精緻化できますか? – Roddy

答えて

14

StringはDelphiのクラスではないため、メソッドはありません。長さ、コピーなどの文字列操作に関数を使用する必要があります。文字列はC++のクラスなので多分混乱します。

+0

ありがとうございます。それはその中心です:文字列型はC++のすべてのクラスですが、Delphiではありません。 Codegearのドキュメントは、これらのメソッドに対応するパスカルをリストするのは間違いです。 – Roddy

+0

私の推測では、ヘルプのPascal等価物はおそらくDelphi.NETを参照しています。ここでStrings *はクラスです...(まだ自分自身をチェックしていない) –

+0

はい、Delphiのドキュメントはすべてこれらのバージョンではうんざりしていますが、少なくともCodeGearはアップデートによってより良いものを収集しようとしています。 – idursun

1
if Trim(s)='' then 

???

+1

私は他の方法があることを知っています。 IsEmptyを実際に使用できるかどうかを知りたい – Roddy

+3

関数IsEmpty(s:string):ブール値。ベギン;結果:=長さ= 0;終わり;今すぐ使用できます;-) –

5

番号文字列は、D2009でもWideStringではありません。どちらにしても、あなたは望みません。 nil /空文字列との比較はメソッド呼び出しよりもはるかに高速です。 Delphiで

var 
    s: string; 
begin 
    if s = '' then begin 
    ShowMessage('It is empty or nil.'); 

...文字列は、ゼロ、空の文字列(=ゼロである)の両方を検出します。

+0

"nilと比較する" - 例を表示できますか? Ocayyyy。 – Roddy

+0

。私はこれを得ます: [DCCエラー] Unit69.pas(31):E2010互換性のないタイプ: 'string'と 'Pointer' 何が間違っていますか? (これはD2007で、ちなみに。) – Roddy

+0

私の例ではエラーです。一定。要点は、実際にはDelphiはフードの下で無限に比較されます(逆アセンブリを見てください)。 –

5

デルファイはハイブリッド言語です。基本的なタイプとクラスが含まれています。クラス(およびレコードとオブジェクト)のみがメソッドを含むことができます。

文字列は基本型ですが、特殊文字列です。それは予約語を持つ唯一のタイプです。だからこそ、小文字(文字列)で書かれているのは、先頭のキャプチヤル(整数)を持つ他の型とは異なります。

あなたはあなたが好きなことができるかどうか:

type 
    TString = class 
    private 
    FString: string; 
    public 
    constructor Create(const AValue: string); 

    property &String: string read FString write FString; 
    property IsEmpty: Boolean read GetIsEmpty; 
    // ... 
    end; 
+0

"&String"はどういう意味ですか? –

+1

予約語(文字列またはwhileなど)の前に&を付けて、通常の識別子として使用できます。 –

関連する問題