https://github.com/JuliaLang/julia/pull/12279
On Thursday, July 23, 2015 at 9:55:48 PM UTC+3, Ismael VC wrote: > > You are welcome, if you think this needs some clarification you could try > to edit the manual for the good of everyone else! > > Cheers. > > On Thu, Jul 23, 2015 at 8:26 AM, Tero Frondelius <[email protected] > <javascript:>> wrote: > >> Thanks, it makes sense now. I actually read the documentation earlier, >> but didn't understand it. Now with the example it's very clear. >> >> >> On Thursday, July 23, 2015 at 3:56:39 PM UTC+3, Ismael VC wrote: >>> >>> help?> @sprintf >>> INFO: Loading help data... >>> Base.@sprintf("%Fmt", args...) >>> >>> Return "@printf" formatted output as string. >>> >>> julia> s = @sprintf "this is a %s" "test" >>> "this is a test" >>> >>> julia> println(s) >>> this is a test >>> >>> That is because `@sprintf` returns a string which you haven't printed. >>> >>> >>> El miércoles, 22 de julio de 2015, 23:31:36 (UTC-5), Tero Frondelius >>> escribió: >>>> >>>> Thanks. My real error was to use @sprintf macro, thus a follow up >>>> question, why this isn't printing anything: >>>> macro Write(arr) >>>> quote >>>> for i in $arr >>>> @sprintf("%12.6f\n",i) >>>> end >>>> end >>>> end >>>> >>>> a = 1e5*rand(10) >>>> @Write a >>>> This is purely for learning purposes. This was simple enough example, >>>> which I could try to develop myself. >>>> >>>> >>>> On Thursday, July 23, 2015 at 1:21:04 AM UTC+3, Ismael VC wrote: >>>>> >>>>> You forgot to interpolate the expression with `$`: >>>>> >>>>> julia> macro write(arr) >>>>> >>>>> quote >>>>> >>>>> for i in $arr >>>>> >>>>> @printf("%12.6f\n",i) >>>>> >>>>> end >>>>> >>>>> end >>>>> >>>>> end >>>>> >>>>> >>>>> julia> a = 1e5*rand(10) >>>>> >>>>> 10-element Array{Float64,1}: >>>>> >>>>> 46310.6 >>>>> >>>>> 25130.5 >>>>> >>>>> 30710.8 >>>>> >>>>> 82089.6 >>>>> >>>>> 48240.2 >>>>> >>>>> 80307.5 >>>>> >>>>> 62870.3 >>>>> >>>>> 78309.3 >>>>> >>>>> 63086.6 >>>>> >>>>> 86144.5 >>>>> >>>>> >>>>> julia> @write a >>>>> >>>>> 46310.583123 >>>>> >>>>> 25130.507159 >>>>> >>>>> 30710.765317 >>>>> >>>>> 82089.565630 >>>>> >>>>> 48240.227962 >>>>> >>>>> 80307.529256 >>>>> >>>>> 62870.334927 >>>>> >>>>> 78309.327456 >>>>> >>>>> 63086.608038 >>>>> >>>>> 86144.524017 >>>>> >>>>> >>>>> julia> >>>>> >>>>> But this can be done with anormal function. >>>>> >>>>> El miércoles, 22 de julio de 2015, 13:37:28 (UTC-5), Tero Frondelius >>>>> escribió: >>>>>> >>>>>> I'm trying to learn macros. Can you help me to get this working? >>>>>> Currently the error is that arr is not defined. Probably an obvious >>>>>> mistake, but I just don't get hang of it. >>>>>> >>>>>> macro Write(arr) >>>>>> @eval begin >>>>>> for i in arr >>>>>> @sprintf("%12.6f\n",i) >>>>>> end >>>>>> end >>>>>> end >>>>>> >>>>>> >>>>>> a = 1e5*rand(10) >>>>>> @Write a >>>>>> >>>>>> >>>>>> >>>>>> On Tuesday, July 14, 2015 at 4:20:43 PM UTC+3, [email protected] >>>>>> wrote: >>>>>>> >>>>>>> You could just use a macro to take the format and the array and let >>>>>>> it write the "messy" loop for you. >>>>>>> >>>>>>> On Tuesday, July 14, 2015 at 8:39:44 PM UTC+10, Ferran Mazzanti >>>>>>> wrote: >>>>>>>> >>>>>>>> Yes thanks, I knew already looped solutions :) >>>>>>>> I was looking for somethin' compact as in the fortran statement >>>>>>>> above, though. It makes things more *neat*, if there's any such thing. >>>>>>>> >>>>>>>> On Tuesday, July 14, 2015 at 12:08:59 PM UTC+2, Kaj Wiik wrote: >>>>>>>>> >>>>>>>>> Would this work for you: >>>>>>>>> julia> a = 1e5*rand(1000) >>>>>>>>> julia> for i in a >>>>>>>>> @printf("%12.6f\n", i) >>>>>>>>> end >>>>>>>>> 74708.038385 >>>>>>>>> 71244.774457 >>>>>>>>> 5057.229038 >>>>>>>>> 3761.297034 >>>>>>>>> ... >>>>>>>>> >>>>>>>>> Remember that loops are fast in Julia... >>>>>>>>> >>>>>>>>> Kaj >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> On Tuesday, July 14, 2015 at 9:14:37 AM UTC+3, Ferran Mazzanti >>>>>>>>> wrote: >>>>>>>>>> >>>>>>>>>> Thanks for the info. Actually my question comes from old fortran >>>>>>>>>> style, where I can write something of the form >>>>>>>>>> Write(1,'1000f12.6') a >>>>>>>>>> where a is an array. The string inside the write function says I >>>>>>>>>> can print 1000 doubkes in 12 characters with 6 decimals. So the >>>>>>>>>> string is a >>>>>>>>>> constant literal, and array a can contain 1000 or less elements that >>>>>>>>>> will >>>>>>>>>> be properly formatted. Is there a way to do something like this in >>>>>>>>>> Julia? >>>>>>>>>> What if Inwant to print 1000 float64 on the same line with a >>>>>>>>>> given format for each element? >>>>>>>>>> Maybebthis is easier... >>>>>>>>>> Best regards and thanks. >>>>>>>>>> Ferran. >>>>>>>>> >>>>>>>>> >
