2009-06-19 8 views
5

Документы Embaracdero "IsEmpty" methods для типов строк, которые я успешно использовал с кодом C++ Builder.Могу ли я использовать строковые методы «IsEmpty» в Delphi

WideString s; 

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

Я пробовал то же самое с Delphi и не мог заставить его компиляции:

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

Я знаю, что вы можете сравнить с пустой строкой, или вызовите функцию Length, но это возможно вызвать этот метод IsEmpty из Delphi?

РЕДАКТИРОВАТЬ: просто для разъяснения это не означало проблему с String vs Widestring.

В принципе, документы, которые я ссылаюсь на выше, описывают синтаксис Pascal, а также C++, но это, похоже, не работает. Я предполагаю, что это всего лишь недостаток документации.

Возвращает true, если System :: WideString :: WideString пуст.

Pascal: Функция IsEmpty: bool;

+0

Что делает C++ реализация выглядит? –

+1

Возможно, вы не думаете, что это проблема WideString vs. string, но это так. –

+0

@Craig - вопрос не должен включать строки, только WideStrings. Можете ли вы уточнить? – Roddy

ответ

14

String не является классом в Delphi, поэтому он не имеет методов, вам нужно использовать функции для строковых манипуляций, таких как Length, Copy и т. Д. String - это класс на C++, поэтому, возможно, вы в этом смущены.

+0

Спасибо. В этом суть: типы строк - это все классы на C++, но не в Delphi. Документация Codegear неверна, чтобы перечислять эквиваленты pascal для этих методов. – Roddy

+0

Мое предположение, что эквиваленты Pascal в справке, вероятно, относятся к Delphi.NET, где Strings * являются * классами ...(еще не проверил это сам) –

+0

Да, документация Delphi все испортилась в этих версиях, но, по крайней мере, CodeGear пытается собрать что-то лучшее через обновления. – idursun

1
if Trim(s)='' then 

???

+1

Я знаю, что есть другие способы. Я хочу знать, можно ли использовать IsEmpty. – Roddy

+3

Функция IsEmpty (s: string): boolean; начать; Результат: = длина (с) = 0; конец; Теперь вы можете использовать его ;-) –

5

№ строка не WideString, даже в D2009. Вы тоже не захотите; сравнение с nil/empty string намного быстрее, чем вызов метода.

В Delphi:

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

... строка определяет как ноль и пустую строку (которая = ноль).

+0

"по сравнению с нолем" - Можете ли вы показать пример? – Roddy

+0

Окаейый. Я получаю это: [DCC Error] Unit69.pas (31): E2010 Несовместимые типы: 'string' и 'Pointer' Что я делаю неправильно? (это с D2007, кстати.) – Roddy

+0

Ошибка в моем примере. Исправлена. Дело в том, что Delphi фактически сравнивается с нолем под капотом (посмотрите на разборку). –

5

Delphi - это гибридный язык. Он содержит основные типы и классы. Только классы (и записи и объекты) могут содержать методы.

String - это базовый тип, хотя и специальный. Это единственный тип, который имеет зарезервированное слово. Вот почему его часто пишут с строчными буквами (строка), в отличие от других типов, которые имеют начальный захват (Integer).

Вы можете, если вы хотите:

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

Вы можете префикс зарезервированного слова (например, строки или в то время) с помощью & использовать его как обычный идентификатор. –

Смежные вопросы