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.
>>>>>>>
>>>>>>>