[fpc-pascal] TIniFile: how to save bool as string?
JB
josebenedito at gmail.com
Tue Oct 7 20:58:11 CEST 2014
I usually use integer cast to boolean values, sample:
var
cond: boolean;
i: integer;
begin
cond := true;
writeln(inttostr(integer(cond)));
i := 0;
if boolean(i) then
writeln('true')
else
writeln('false');
end;
best regards
José Benedito
JBS Soluções
Consulting Systems Development
c <josebenedito at gmail.com>ontato at jbsolucoes.net
www.jbsolucoes.net
skype: sac at jbsolucoes.net
+55 22 30251654
+55 22 996064279
On Tue, Oct 7, 2014 at 3:46 PM, silvioprog <silvioprog at gmail.com> wrote:
> On Sat, Oct 4, 2014 at 6:28 AM, Reinier Olislagers <
> reinierolislagers at gmail.com> wrote:
>
>> On 03/10/2014 21:16, silvioprog wrote:
>> > When I use the TIniFile to save my configurations, it saves the boolean
>> > values as 0 and 1.
>> >
>> > Is there any way to save these values as string (true/false) instead
>> > of integer (0/1)? If not, can I send a patch to implement that?!
>>
>> 1. Write your own wrapper?
>> 2. AFAIR, there already is a bug report+patch in the bug tracker on
>> extending TInifiles.
>
>
> Thanks.
>
> Internally it uses this functions:
>
> ...
> function CharToBool(AChar: char): boolean;
> begin
> Result := (Achar = '1');
> end;
>
> function BoolToChar(ABool: boolean): char;
> begin
> if ABool then
> Result := '1'
> else
> Result := '0';
> end;
> ...
>
> This functions could be replaced by functions from SysUtils functions,
> allowing compatibility with words like 0/1 (as is now), true/false, yes/no
> (USA), sim/não (Brazil), foo/bar (any) etc. Then:
>
> Instead of:
>
> function TCustomIniFile.ReadBool(const Section, Ident: string; Default:
> Boolean): Boolean;
> var
> s: string;
> begin
> Result := Default;
> s := ReadString(Section, Ident, '');
> if s > '' then
> Result := CharToBool(s[1]);
> end;
>
> Could be:
>
> function TCustomIniFile.ReadBool(const Section, Ident: string; Default:
> Boolean): Boolean;
> var
> s: string;
> begin
> Result := Default;
> s := ReadString(Section, Ident, '');
> if s > '' then
> Result := SysUtils.StrToBoolDef(s[1], False);
> end;
>
> And, instead of:
>
> procedure TCustomIniFile.WriteBool(const Section, Ident: string; Value:
> Boolean);
> begin
> WriteString(Section, Ident, BoolToChar(Value));
> end;
>
> Could be:
>
> procedure TCustomIniFile.WriteBool(const Section, Ident: string; Value:
> Boolean);
> begin
> WriteString(Section, Ident, SysUtils.BoolToStr(Value, True));
> end;
>
> So I could use with:
>
> initialization
> SetLength(SysUtils.TrueBoolStrs, 1);
> SetLength(SysUtils.FalseBoolStrs, 1);
> SysUtils.TrueBoolStrs[0] := 'true'; // or other
> SysUtils.FalseBoolStrs[0] := 'false'; // or other
>
> Just ideas hehe..
>
> --
> Silvio Clécio
> My public projects - github.com/silvioprog
>
> _______________________________________________
> fpc-pascal maillist - fpc-pascal at lists.freepascal.org
> http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freepascal.org/pipermail/fpc-pascal/attachments/20141007/65e0177f/attachment.html>
More information about the fpc-pascal
mailing list