21

私はほぼすべてのプロジェクトでこのシナリオを何度も使用してきました。ある種のデータ変換を行っているとき、ブール値に関しては、単純にすることになると少し迷ってしまいます。以下のこのステートメントは、私のコード全体で親指のように突き出ています。

if BoolVal then
  StrVal:= 'True'
else
  StrVal:= 'False';

この評価を実行する簡単な方法があるかどうか疑問に思っていますか? おそらく、Case私が知らないステートメントの使用ですか?私の実際の実装は単なるものよりも複雑ですStrValが、True か False かに応じて 2 つの異なる値を返すことで構成されています。たとえば、ここにいくつかの実際のコードがあります...

if fsBold in Can.Font.Style then
  ConvertTo(AddSomeOtherText + 'True')
else
  ConvertTo(AddSomeOtherText + 'False');

それは、私が望んでいることがどれほど単純かを強調するためです。私はこれに沿って何かできるかどうか疑問に思っています:

ConvertTo(AddSomeOtherText + BoolToStrCase((fsBold in Can.Font.Style), 'True', 'False'));

これは本当のコマンドではないと確信していますが、そのような単純さを 1 行で探しています。

4

5 に答える 5

44

unitStrUtilsには ifthen() があります

StrVal := IfThen(BoolVal,'True','False');

そして、この特定のケースでは、次のものを使用することもできます:

StrVal := BoolToStr(BoolVal);
于 2012-11-06T00:54:17.200 に答える
24

ブール値でインデックス付けされた配列について誰も聞いたことがありませんか?

const
  BOOL_TEXT: array[boolean] of string = ('False', 'True');
  YES_NO_TEXT: array[boolean] of string = ('No', 'Yes');
  ERROR_OR_WARNING_TEXT: array[boolean] of string = ('Warning', 'Error');

実際、これは BoolToStr 自体が使用するものです。

function BoolToStr(B: Boolean; UseBoolStrs: Boolean = False): string;
const
  cSimpleBoolStrs: array [boolean] of String = ('0', '-1');
于 2012-11-06T06:36:43.387 に答える
7

ブール値を文字列に変換するために、少なくとも Delphi 2007 から使用されているBoolToStrがあります。最後の例では、次のように使用できます。

TextVal := BoolToStr((fsBold in Can.Font.Style), True);

逆方向 (文字列からブール値) に移動するには、実際の関数を実行する必要があります。このようなものから始める必要があります:

function StringToBoolean(const Value: string): Boolean;
var
  TempStr: string;
begin
  TempStr := UpperCase(Value);
  Result := (TempStr = 'T') or 
            (TempStr = `TRUE`) or 
            (TempStr = 'Y');
end;

BoolVal := StringToBoolean('True');     // True
BoolVal := StringToBoolean('False');    // False
BoolVal := StringToBoolean('tRuE');     // True

もちろん、これはナンセンスがあると機能しませんValueが...

于 2012-11-06T00:55:20.843 に答える