Forum Discussion
Number to Binary
- 9 years ago
I addition to my previous respons.
Some of the things I realized recently, is that:
an "if ... then ... else" statement with big chunks of code like above, is not required.
Thanks to concept of "Lazy Evaluation" in Power Query, you can just put in the code without if...then...else.
Intead, the choice is made later. In the example below: in the Result step.
So the inner part of the previous function (which is the actual function without documentation), can be rewritten as:
fnNBC = (input as anynonnull, base as number, optional outputlength as number) as any => let // input = 10, // base = 2, // outputlength = null, Base16 = "0123456789ABCDEF", Base32 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ234567", Base64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/", Lookups = List.Zip({{16,32,64},{Base16,Base32,Base64}}), Lookup = Text.ToList(List.Last(List.Select(Lookups,each _{0} <= List.Max({16, base}))){1}), InputToList = Text.ToList(input), // This part will be executed if input is text: Reversed = List.Reverse(InputToList), BaseValues = List.Transform(Reversed, each List.PositionOf(Lookup,_)), Indexed = List.Zip({BaseValues, {0..Text.Length(input)-1}}), Powered = List.Transform(Indexed, each _{0}*Number.Power(base,_{1})), Decimal = List.Sum(Powered), // So far this part // This part will be executed if input is not text: Elements = 1+Number.RoundDown(Number.Log(input,base),0), Powers = List.Transform(List.Reverse({0..Elements - 1}), each Number.Power(base,_)), ResultString = List.Accumulate(Powers, [Remainder = input,String = ""], (c,p) => [Remainder = c[Remainder] - p * Number.RoundDown(c[Remainder] / p,0), String = c[String] & Lookup{Number.RoundDown(c[Remainder]/p,0)}])[String], PaddedResultString = if outputlength = null then ResultString else Text.PadStart(ResultString,outputlength,Lookup{0}), // So far this part Result = if input is text then Decimal else PaddedResultString in Result
Still a reaction to your now-striked-through-text, just for better understanding:
in Power Query, "Binary" means: the binary representation of - for example - file contents, not a binary value as in 1001 = 9.
Of course: file contents are also a series of 0's and 1's, but they typically don't represent 1 (huge) decimal value. :smileylol:
Got it. Thanks.