caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
* printf and positional specifier
@ 2006-11-11 20:12 Anastasia Gornostaeva
  2006-11-11 20:35 ` [Caml-list] " Peter Gregory
  0 siblings, 1 reply; 8+ messages in thread
From: Anastasia Gornostaeva @ 2006-11-11 20:12 UTC (permalink / raw)
  To: caml-list

Hello.

$ ocaml
        Objective Caml version 3.09.3

# open Printf;;
# printf "%2$d %1$s" "abc" 2;;
Bad conversion %$, at char number 0 in format string ``%2$d %1$s''


How?

ermine


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [Caml-list] printf and positional specifier
  2006-11-11 20:12 printf and positional specifier Anastasia Gornostaeva
@ 2006-11-11 20:35 ` Peter Gregory
  2006-11-11 20:52   ` Martin Jambon
  2006-11-11 20:59   ` Anastasia Gornostaeva
  0 siblings, 2 replies; 8+ messages in thread
From: Peter Gregory @ 2006-11-11 20:35 UTC (permalink / raw)
  Cc: caml-list, ermine

Anastasia Gornostaeva wrote:
> Hello.
> 
> $ ocaml
>         Objective Caml version 3.09.3
> 
> # open Printf;;
> # printf "%2$d %1$s" "abc" 2;;
> Bad conversion %$, at char number 0 in format string ``%2$d %1$s''
> 
> 
> How?
> 
> ermine
> 

Hi Ermine,

I'm not sure that I understand your question.  I think to achieve what 
you seem to be trying, you would simply write:

# printf "%d %s" 2 "abc";;

You just put the parameters in the order they came in the string.  Does 
that help, it seems like perhaps you needed more than that.

Regards,
Peter.


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [Caml-list] printf and positional specifier
  2006-11-11 20:35 ` [Caml-list] " Peter Gregory
@ 2006-11-11 20:52   ` Martin Jambon
  2006-11-11 21:15     ` Peter Gregory
  2006-11-11 20:59   ` Anastasia Gornostaeva
  1 sibling, 1 reply; 8+ messages in thread
From: Martin Jambon @ 2006-11-11 20:52 UTC (permalink / raw)
  To: Peter Gregory; +Cc: ermine, caml-list

On Sat, 11 Nov 2006, Peter Gregory wrote:

> Anastasia Gornostaeva wrote:
>> Hello.
>> 
>> $ ocaml
>>         Objective Caml version 3.09.3
>> 
>> # open Printf;;
>> # printf "%2$d %1$s" "abc" 2;;
>> Bad conversion %$, at char number 0 in format string ``%2$d %1$s''
>> 
>> 
>> How?
>> 
>> ermine
>> 
>
> Hi Ermine,
>
> I'm not sure that I understand your question.  I think to achieve what you 
> seem to be trying, you would simply write:
>
> # printf "%d %s" 2 "abc";;
>
> You just put the parameters in the order they came in the string.  Does that 
> help, it seems like perhaps you needed more than that.

The dollar stuff is real, although I have no idea of how to make it work. 
It's the last paragraph in the description of Printf.fprintf:
   http://caml.inria.fr/pub/docs/manual-ocaml/libref/Printf.html


Martin

--
Martin Jambon, PhD
http://martin.jambon.free.fr


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [Caml-list] printf and positional specifier
  2006-11-11 20:35 ` [Caml-list] " Peter Gregory
  2006-11-11 20:52   ` Martin Jambon
@ 2006-11-11 20:59   ` Anastasia Gornostaeva
  1 sibling, 0 replies; 8+ messages in thread
From: Anastasia Gornostaeva @ 2006-11-11 20:59 UTC (permalink / raw)
  To: Peter Gregory; +Cc: caml-list

On Sat, Nov 11, 2006 at 08:35:56PM +0000, Peter Gregory wrote:

> ># printf "%2$d %1$s" "abc" 2;;
> >Bad conversion %$, at char number 0 in format string ``%2$d %1$s''

> I'm not sure that I understand your question.  I think to achieve what 
> you seem to be trying, you would simply write:
> 
> # printf "%d %s" 2 "abc";;
> 
> You just put the parameters in the order they came in the string.  Does 
> that help, it seems like perhaps you needed more than that.

>From documentation on Printf module:

   Conversion specifications have the following form:

   % [positional specifier] [flags] [width] [.precision] type

   The optional positional specifier consists of an integer followed by a $;
   the integer indicates which argument to use, the first argument being
   denoted by 1.

ermine


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [Caml-list] printf and positional specifier
  2006-11-11 20:52   ` Martin Jambon
@ 2006-11-11 21:15     ` Peter Gregory
  2006-11-11 21:26       ` Martin Jambon
  2006-11-11 21:40       ` Anastasia Gornostaeva
  0 siblings, 2 replies; 8+ messages in thread
From: Peter Gregory @ 2006-11-11 21:15 UTC (permalink / raw)
  To: Martin Jambon; +Cc: Peter Gregory, ermine, caml-list

Martin Jambon wrote:
> On Sat, 11 Nov 2006, Peter Gregory wrote:
> 
>> Anastasia Gornostaeva wrote:
>>> Hello.
>>>
>>> $ ocaml
>>>         Objective Caml version 3.09.3
>>>
>>> # open Printf;;
>>> # printf "%2$d %1$s" "abc" 2;;
>>> Bad conversion %$, at char number 0 in format string ``%2$d %1$s''
>>>
>>>
>>> How?
>>>
>>> ermine
>>>
>>
>> Hi Ermine,
>>
>> I'm not sure that I understand your question.  I think to achieve what 
>> you seem to be trying, you would simply write:
>>
>> # printf "%d %s" 2 "abc";;
>>
>> You just put the parameters in the order they came in the string.  
>> Does that help, it seems like perhaps you needed more than that.
> 
> The dollar stuff is real, although I have no idea of how to make it 
> work. It's the last paragraph in the description of Printf.fprintf:
>   http://caml.inria.fr/pub/docs/manual-ocaml/libref/Printf.html
> 
> 

I take a different reading to you Martin, although I think it is 
confusing.  I believe that the number specified before the dollar sign 
is the argument that specifies the /precision/ of the output.

So, it is not to specify the argument to print, but the argument to use 
as precision.  That said, I tried it in the context they suggest and I 
couldn't make it work!

Ermine: do you have a situation where this is important?  I can't think 
of any situation that comes to mind.

Peter.


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [Caml-list] printf and positional specifier
  2006-11-11 21:15     ` Peter Gregory
@ 2006-11-11 21:26       ` Martin Jambon
  2006-11-11 21:40       ` Anastasia Gornostaeva
  1 sibling, 0 replies; 8+ messages in thread
From: Martin Jambon @ 2006-11-11 21:26 UTC (permalink / raw)
  To: Peter Gregory; +Cc: ermine, caml-list

On Sat, 11 Nov 2006, Peter Gregory wrote:

> Martin Jambon wrote:
>> On Sat, 11 Nov 2006, Peter Gregory wrote:
>> 
>>> Anastasia Gornostaeva wrote:
>>>> Hello.
>>>> 
>>>> $ ocaml
>>>>         Objective Caml version 3.09.3
>>>> 
>>>> # open Printf;;
>>>> # printf "%2$d %1$s" "abc" 2;;
>>>> Bad conversion %$, at char number 0 in format string ``%2$d %1$s''
>>>> 
>>>> 
>>>> How?
>>>> 
>>>> ermine
>>>> 
>>> 
>>> Hi Ermine,
>>> 
>>> I'm not sure that I understand your question.  I think to achieve what you 
>>> seem to be trying, you would simply write:
>>> 
>>> # printf "%d %s" 2 "abc";;
>>> 
>>> You just put the parameters in the order they came in the string.  Does 
>>> that help, it seems like perhaps you needed more than that.
>> 
>> The dollar stuff is real, although I have no idea of how to make it work. 
>> It's the last paragraph in the description of Printf.fprintf:
>>   http://caml.inria.fr/pub/docs/manual-ocaml/libref/Printf.html
>> 
>> 
>
> I take a different reading to you Martin, although I think it is confusing. 
> I believe that the number specified before the dollar sign is the argument 
> that specifies the /precision/ of the output.
> 
> So, it is not to specify the argument to print, but the argument to use as 
> precision.  That said, I tried it in the context they suggest and I couldn't 
> make it work!

Here is what I tried:

# open Printf;;
# let x = 1234.5678;;
val x : float = 1234.5678

(* Just for fun *)
# printf "%.2f %.*f" x 3 x;;
1234.57 1234.568- : unit = ()

(* I understand that the following should print "1234.57 1234.57": *)
# printf "%.2f %.*1$f" x x;;
Bad conversion %1, at char number 5 in format string ``%.2f %.*1$f''


Martin

--
Martin Jambon, PhD
http://martin.jambon.free.fr


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [Caml-list] printf and positional specifier
  2006-11-11 21:15     ` Peter Gregory
  2006-11-11 21:26       ` Martin Jambon
@ 2006-11-11 21:40       ` Anastasia Gornostaeva
  2006-11-12  0:46         ` Martin Jambon
  1 sibling, 1 reply; 8+ messages in thread
From: Anastasia Gornostaeva @ 2006-11-11 21:40 UTC (permalink / raw)
  To: Peter Gregory; +Cc: caml-list

On Sat, Nov 11, 2006 at 09:15:37PM +0000, Peter Gregory wrote:

> I take a different reading to you Martin, although I think it is 
> confusing.  I believe that the number specified before the dollar sign 
> is the argument that specifies the /precision/ of the output.
> 
> So, it is not to specify the argument to print, but the argument to use 
> as precision.  That said, I tried it in the context they suggest and I 
> couldn't make it work!
> 
> Ermine: do you have a situation where this is important?  I can't think 
> of any situation that comes to mind.

For example:
http://www.gnu.org/software/gettext/manual/html_mono/gettext.html#SEC18

In fact I have my own module for translations and i'm interesting in this 
printf's feature.

P.s. Yes, I know about ocaml-gettext library.

ermine


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [Caml-list] printf and positional specifier
  2006-11-11 21:40       ` Anastasia Gornostaeva
@ 2006-11-12  0:46         ` Martin Jambon
  0 siblings, 0 replies; 8+ messages in thread
From: Martin Jambon @ 2006-11-12  0:46 UTC (permalink / raw)
  To: Anastasia Gornostaeva; +Cc: Peter Gregory, caml-list

On Sun, 12 Nov 2006, Anastasia Gornostaeva wrote:

> On Sat, Nov 11, 2006 at 09:15:37PM +0000, Peter Gregory wrote:
>
>> I take a different reading to you Martin, although I think it is
>> confusing.  I believe that the number specified before the dollar sign
>> is the argument that specifies the /precision/ of the output.
>>
>> So, it is not to specify the argument to print, but the argument to use
>> as precision.  That said, I tried it in the context they suggest and I
>> couldn't make it work!
>>
>> Ermine: do you have a situation where this is important?  I can't think
>> of any situation that comes to mind.
>
> For example:
> http://www.gnu.org/software/gettext/manual/html_mono/gettext.html#SEC18
>
> In fact I have my own module for translations and i'm interesting in this
> printf's feature.

OK, so you really want to invert the order of the arguments :-)

You might want to use a syntax extension like xstrp4 or 
heredoc.

http://www.ocaml-programming.de/packages/documentation/xstrp4/
http://www.eleves.ens.fr/home/frisch/info/HereDoc.html



Martin

--
Martin Jambon, PhD
http://martin.jambon.free.fr



^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2006-11-12  0:46 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2006-11-11 20:12 printf and positional specifier Anastasia Gornostaeva
2006-11-11 20:35 ` [Caml-list] " Peter Gregory
2006-11-11 20:52   ` Martin Jambon
2006-11-11 21:15     ` Peter Gregory
2006-11-11 21:26       ` Martin Jambon
2006-11-11 21:40       ` Anastasia Gornostaeva
2006-11-12  0:46         ` Martin Jambon
2006-11-11 20:59   ` Anastasia Gornostaeva

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).