![]() |
BooleanToString und StringToBoolean
Hallo DP,
ich habe mal zur Diskussion zwei Routinen, die ich hier mal reinstelle.
Delphi-Quellcode:
Es wird hier ein Boolean übergeben; es wird ein entsprechender String zurückgegeben.
//Boolean2String
Function B2S(B:Boolean):String; begin if B=True then Result:='TRUE' else Result:='FALSE' end; //StringToBoolean: S muss 'TRUE' oder 'FALSE' sein! Function S2B(S:String):BOOLEAN; begin if STRUPPER(PCHAR(S))='TRUE' then Result:=TRUE else Result:=FALSE; end; Function B2S(B:Boolean):String; Hier wird ein String übergegen; man bekommt ein Boolean zurück. Function S2B(S:String):BOOLEAN; Gerade letzte Routine birgt Gefahren: Leerer String, nicht getrimmter String etc. Wie würdet es Ihr es elegant und sicher lösen? Bin gespannt... Go2EITS |
Re: BooleanToString und StringToBoolean
|
Re: BooleanToString und StringToBoolean
Delphi-Quellcode:
So ungefähr mach ich es immer. Die müssten eigentlich beide ohne Probleme funktionieren :gruebel:
function B2S(B: Boolean): String;
begin case B of true : Result := 'TRUE'; false: Result := 'FALSE'; end; end; fucntion S2B(S: String): Boolean; begin Result := false; // falls mist übergeben wird dann false if UpperCase(S) = 'TRUE' then Result := true; if UpperCase(S) = 'FALSE' then Result := false; end; EDIT: Obwohl man sich die zweite if-Zeile auch sparen kann... Gruß Neutral General |
Re: BooleanToString und StringToBoolean
Ich hätte es so gemacht:
Delphi-Quellcode:
Aber warum erstellst du die Funktionen, die gibt's doch schon!?
Function S2B(S:String):BOOLEAN;
begin if STRUPPER(PCHAR(S)) = 'TRUE' then Result := TRUE else if STRUPPER(PCHAR(S)) = 'FALSE' then Result := FALSE else { Fehlerroutine } end; |
Re: BooleanToString und StringToBoolean
Hallo,
B=True sollte man nicht schreiben.
Delphi-Quellcode:
reicht völlig.
if B then Result:='TRUE' else Result:='FALSE';
So würde ich die andere Funktion realisieren:
Delphi-Quellcode:
//StringToBoolean: S muss 'TRUE' oder 'FALSE' sein!
Function S2B(Const S:String):BOOLEAN; begin Result := SameText('true', S); end; Viele Grüße, pszopp |
Re: BooleanToString und StringToBoolean
Ok, ich will dann auch :
Delphi-Quellcode:
Function BoolToString(Const ABool: Boolean): String;
Const coBoolValues : Array[Boolean] of String = ( 'false', 'true' ); Begin Result := coBoolValues[ABool]; End; Function StringToBool(Const AString: String): Boolean; Begin Result := AnsiSameText(AString, 'true'); End; |
Re: BooleanToString und StringToBoolean
um Muetzes Vorschlag noch zusätzlich abzusichern dann so:
Delphi-Quellcode:
Ein Boolean ist ein Byte und manchesmal trifft man auf Programierer die per harten Cast Boolean := Boolean(3) benutzen. Das würde dann mit Muetzes Funktion eine AV beim Array Zugriff auslösen. Mit obiger Erweiterung macht man es Bulletproof.
function BoolToString(const ABool: Boolean): String;
const coBoolValues : Array[Boolean] of String = ( 'false', 'true' ); begin Result := coBoolValues[ABool <> False]; end; Gruß Hagen |
Re: BooleanToString und StringToBoolean
@mirage228 Uhiii peinlich, ich wusste nicht, dass es StrToBool und BoolToStr gibt. Ich hatte nach BooleanToString und StringToBoolean bzw. BooleanToStr und StrToString hier in der DP und Torry gesucht.
@Neutral General Dein
Delphi-Quellcode:
gefällt mir sehr gut in Ergänzung mit @Vales Lösung der Fehlerbehandlung.
function B2S(B: Boolean): String;
begin case B of true : Result := 'TRUE'; false: Result := 'FALSE'; end; end; fucntion S2B(S: String): Boolean; begin Result := false; // falls mist übergeben wird dann false if UpperCase(S) = 'TRUE' then Result := true; if UpperCase(S) = 'FALSE' then Result := false; end; @pszopp, auch gut! Alles super Lösungen, die ich sofort durchschaut habe. Die Lösungen von Muetze1 und Hagen sind schon anspruchsvoller: Hier muss ich schon genau schauen, wie es funktioniert. AnsiSametext und SameText sind mir neu, und vielleicht auch anderen Usern. Und Hagen macht den Mutze1 Code noch fehlersicher. Herzlichen Dank an Euch. Ich habe heute viel dazugelernt!!!! Cu! :corky: Go2EITS |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:06 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz