Obsolete test build - format() -

Community news and information about new or upcoming versions of AutoHotkey
Posts: 7057
Joined: 30 Sep 2013, 04:07
GitHub: Lexikos

Obsolete test build - format() -

15 Oct 2014, 03:14

Obsolete: see v1.1.17.

I have uploaded a test build with a new function:

string := Format(format, values*)

The format string should contain placeholders of the form {param:format}.
param: An integer corresponding to the position of a value in the parameter list, where 1 is the first parameter after format. If omitted, the number of the last placeholder + 1 is used (or 1 for the first placeholder).
format: A string controlling how the value will be formatted. The following subset of the printf format specification is supported:
  • flags: - + 0 space #
    width: decimal integer only
    .precision: decimal integer only
    type: d i o u x X e E f g G a A c C p s (not n S Z)
Size prefixes are not supported - numbers are always 64-bit, except the character and pointer types.

type defaults to 's' if omitted. 's' is a string value, not a pointer to a string.

As with Send, {{} and {}} produce literal braces. Any invalid placeholders are put into the output as is. Whitespace inside the braces is not permitted (except as a flag).


Code: Select all

; Simple substitution
s .= format("{2}, {1}!`r`n", "World", "Hello")
; Padding with spaces
s .= format("|{:-10}|`r`n|{:10}|`r`n", "Left", "Right")
; Hexadecimal
s .= format("{1:#x} {2:X} 0x{3:x}`r`n", 3735928559, 195948557, 0)
; Floating-point
s .= format("{1:0.3f} {1:.10f}", 4*atan(1))

WinWaitActive ahk_class AutoHotkey
ControlSetText Edit1, %s%
The differences from format() distributed with v2 alpha include:
  • The parameter index can be omitted, as in {} or {:02i}
  • The type can be omitted (defaults to 's'), as in {1:5}.
  • Size prefixes aren't supported, as mentioned above.
This also contains everything from the previous test build.



Hexadecimal integers are always unsigned, as per normal printf behaviour but inconsistent with AutoHotkey's normal hexadecimal formatting. The '#' flag adds the 0x prefix only for non-zero values, again inconsistent with the norm. This is because the formatting of each value is done entirely by printf (to do otherwise would mean potentially much larger code and longer development time).
User avatar
Posts: 505
Joined: 30 Sep 2013, 14:17
GitHub: fincs
Location: Seville, Spain

Re: New test build - format() -

15 Oct 2014, 13:49

I'm glad you rebased the changes of your earlier test build on top of the latest v1.1 release. The built-in Format() function will be really useful (no more ugly SetFormat temp hacks!).

BTW: for consistency, shouldn't it be called StrFormat()?
Windows 10 x64 Build 18362 | AMD Ryzen 7 3700X with 32 GB of RAM | AutoHotkey v1.1.31.01
Get SciTE4AutoHotkey v3.0.06.01 - [My project list]
Posts: 647
Joined: 17 Nov 2013, 11:32

Re: New test build - format() -

15 Oct 2014, 15:39

See this update, I am reminded of another function on the string, I always want to achieve it.

Such as:

Code: Select all

;obj:={1:"key1",2:Test,(Test2):"key3"}	;It is not JSON rules, is AHK obj rules.
MsgBox % ObjTree(obj)
Posts: 7057
Joined: 30 Sep 2013, 04:07
GitHub: Lexikos

Re: New test build - format() -

15 Oct 2014, 18:52

fincs wrote:BTW: for consistency, shouldn't it be called StrFormat()?
I thought about that, but it doesn't seem necessary, just inconvenient. We also have FormatTime, which also produces a formatted string, and SplitPath and Sort, which manipulate strings but don't begin with "Str". Aside from that, it doesn't format a string; it produces a formatted string from zero, one or more values.

Edit: I'm also thinking about adding a simple hex() function, since there's a fairly common need and format("0x{:x}", v) is a bit awkward. (format("{:#x}", v) is slightly better but produces 0 instead of 0x0.)
Last edited by lexikos on 15 Oct 2014, 19:19, edited 1 time in total.
Reason: .
User avatar
Posts: 7730
Joined: 29 Sep 2013, 17:08
Facebook: J0EDF
Google: +joedf
GitHub: joedf
Location: Canada

Re: New test build - format() -

16 Oct 2014, 03:44

A built in Str2hex or hex() function would be very useful

Return to “Announcements”

Who is online

Users browsing this forum: No registered users and 4 guests