<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Sat, Oct 4, 2014 at 6:28 AM, Reinier Olislagers <span dir="ltr"><<a href="mailto:reinierolislagers@gmail.com" target="_blank">reinierolislagers@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><span class="">On 03/10/2014 21:16, silvioprog wrote:<br>
> When I use the TIniFile to save my configurations, it saves the boolean<br>
> values as 0 and 1.<br>
><br>
> Is there any way to save these values ​​as string (true/false) instead<br>
> of integer (0/1)? If not, can I send a patch to implement that?!<br>
<br>
</span>1. Write your own wrapper?<br>
2. AFAIR, there already is a bug report+patch in the bug tracker on<br>
extending TInifiles.</blockquote></div><div><br></div><div>Thanks.</div><div><br></div><div>Internally it uses this functions:</div><div><br></div><div>...</div><div><div>function CharToBool(AChar: char): boolean;</div><div>begin</div><div>  Result := (Achar = '1');</div><div>end;</div><div><br></div><div>function BoolToChar(ABool: boolean): char;</div><div>begin</div><div>  if ABool then</div><div>    Result := '1'</div><div>  else</div><div>    Result := '0';</div><div>end;</div></div><div>...</div><div><br></div><div>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:<br></div><div><br></div><div>Instead of:</div><div><br></div><div><div>function TCustomIniFile.ReadBool(const Section, Ident: string; Default: Boolean): Boolean;</div><div>var</div><div>  s: string;</div><div>begin</div><div>  Result := Default;</div><div>  s := ReadString(Section, Ident, '');</div><div>  if s > '' then</div><div>    Result := CharToBool(s[1]);</div><div>end;</div></div><div><br></div><div>Could be:</div><div><br></div><div><div>function TCustomIniFile.ReadBool(const Section, Ident: string; Default: Boolean): Boolean;</div><div>var</div><div>  s: string;</div><div>begin</div><div>  Result := Default;</div><div>  s := ReadString(Section, Ident, '');</div><div>  if s > '' then</div><div>    Result := SysUtils.StrToBoolDef(s[1], False);</div><div>end;</div></div><div><br></div><div>And, instead of:</div><div><br></div><div><div>procedure TCustomIniFile.WriteBool(const Section, Ident: string; Value: Boolean);</div><div>begin</div><div>  WriteString(Section, Ident, BoolToChar(Value));</div><div>end;</div></div><div><br></div><div>Could be:</div><div><br></div><div><div>procedure TCustomIniFile.WriteBool(const Section, Ident: string; Value: Boolean);</div><div>begin</div><div>  WriteString(Section, Ident, SysUtils.BoolToStr(Value, True));</div><div>end;</div></div><div><br></div><div>So I could use with:</div><div><br></div><div><div>initialization</div><div>  SetLength(SysUtils.TrueBoolStrs, 1);</div><div>  SetLength(SysUtils.FalseBoolStrs, 1);</div><div>  SysUtils.TrueBoolStrs[0] := 'true'; // or other</div><div>  SysUtils.FalseBoolStrs[0] := 'false'; // or other</div></div><div><br></div><div>Just ideas hehe..<br></div><div><br></div>--<br>Silvio Clécio<br>My public projects - <a href="http://github.com/silvioprog" target="_blank">github.com/silvioprog</a>
</div></div>