2009-06-19 16 views
5

Documentos de Embaracdero "IsEmpty" methods para tipos de cadenas, que he utilizado con éxito con el código C++ Builder.¿Puedo utilizar los métodos de cadena "IsEmpty" en Delphi

WideString s; 

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

he intentado lo mismo de Delphi, y no podía conseguir que se compile:

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

Sé que se puede comparar con una cadena vacía, o llame a la función de longitud, pero es posible para llamar a este método IsEmpty de Delphi?

EDITAR: Solo para aclarar, esto no fue un problema de String vs Widestring.

Básicamente, los documentos que he descrito anteriormente describen una sintaxis de Pascal, así como una de C++, pero parece que esto no funciona. Supongo que esto es solo un defecto en la documentación.

Devuelve verdadero si System :: WideString :: WideString está vacío.

Pascal: function IsEmpty: bool;

+0

¿Qué hace la implementación en C++ parece? –

+1

Puede que no pienses que es un problema de cadena ancha vs. cadena, pero sí lo es. –

+0

@Craig: la pregunta no debe incluir cadenas, solo WideStrings. ¿Puedes elaborar? – Roddy

Respuesta

14

String no es una clase en Delphi, por lo tanto no tiene métodos, tienes que usar funciones para manipulaciones de cadenas como Length, Copy, etc ... String es una clase en C++, así que tal vez estés confundido.

+0

Gracias. Ese es el meollo de todo: los tipos de cadenas son todas clases en C++, pero no en Delphi. La documentación de Codegear es incorrecta para listar equivalentes pascales a estos métodos. – Roddy

+0

Mi suposición es que los equivalentes de Pascal en la ayuda probablemente se refieren a Delphi.NET donde las cadenas * son * clases ...(Todavía no lo he comprobado) –

+0

Sí, la documentación de Delphi está mal en todas estas versiones, pero al menos CodeGear está intentando recopilar algo mejor a través de las actualizaciones. – idursun

1
if Trim(s)='' then 

???

+1

Sé que hay otras formas. Quiero saber si realmente se puede usar IsEmpty. – Roddy

+3

función IsEmpty (s: cadena): booleano; empezar; resultado: = longitud (es) = 0; fin; Ahora puedes usarlo ;-) –

5

No. string no es WideString, incluso en D2009. No querrías, tampoco; comparar con nil/cadena vacía es mucho más rápido que una llamada a método.

En Delphi:

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

... para la cadena detecta tanto nula y la cadena vacía (que es = cero).

+0

"comparando con nada" - ¿Puedes mostrar un ejemplo? – Roddy

+0

Okaayyyy. Entiendo esto: [Error de DCC] Unit69.pas (31): E2010 Tipos incompatibles: 'cadena' y 'Puntero' ¿Qué estoy haciendo mal? (esto con D2007, por cierto.) – Roddy

+0

Error en mi ejemplo. Fijo. El punto es que Delphi en realidad se compara con cero debajo del capó (mira el desmontaje). –

5

Delphi es un lenguaje híbrido. Contiene clases y tipos básicos. Solo las clases (y los registros y objetos) pueden contener métodos.

Cadena es un tipo básico, aunque especial. Es el único tipo que tiene una palabra reservada. Es por eso que a menudo se escribe con una letra minúscula (cadena) a diferencia de otros tipos que tienen una captura inicial (entero).

puede hacerlo si lo desea:

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

¿Qué significa "& String"? –

+1

Puede prefijar una palabra reservada (como una cadena o while) con un & para usarla como un identificador normal. –

Cuestiones relacionadas