Hello,
This is my first post in this group. Please correct me if I make some
mistake in asking my question. (I have not found any specific "posting
guide" for this group.)
I'm accustomed to use sscanf in C and Octave, and it is one of the first
things that I missed when started using Julia. I'm not sure of the reason
why it is not implemented (on the other hand there is the @sprintf macro).
Of course, regular expressions can do that work as well, and perhaps Julia
developers have reasons to prefer that option to a scanf-like function. But
I have not found any statement about this topic in the manual, this group
or anywhere else.
Ok, be that as it may... I tried to call the C function sscanf with ccall
(at least for fun, if not for practical reasons), but I have not been able
to make it work to scan float variables. For example, this does work (using
int and string variables):
## C equivalent code:
# int hour, minutes;
# char ampm[3];
# sscanf("12:30 AM", "%d:%d %s", &hour, &minutes, ampm);
hour = Int32[0]
minutes = Int32[0]
ampm = "??"
ccall(:sscanf, Int32, (Ptr{Uint8}, Ptr{Uint8}, Ptr{Int32}, Ptr{Int32}, Ptr{
Uint8}),
"12:30 AM", "%d:%d %s", hour, minutes, ampm)
However, if I want to scan a float, sscanf fails to parse the string. E.g.
replace "hour" or "minutes" by a Float64 - or Float32 - array, and change
the corresponding "%d" in the pattern string by "%f", "%g", "%e", etc.; in
that case ccall returns 0, and the variables do not change.
Any idea of why?
I'm using Julia 0.2.1 for Windows 32 bit in Windows 7. Please let me know
if you need more details.
By the way, you will see in the example that in the first argument to ccall
I have only put the name of the C function, instead of a tuple including
the name of the C library ("stdio" in this case). The reason is that using
the tuple throws an error ("error compiling anonymous: could not load
module stdio: no error"). Does it anything to do with my not having MinGW
or any other compiler installed in my machine?