From mboxrd@z Thu Jan 1 00:00:00 1970 Received: (from majordomo@localhost) by pauillac.inria.fr (8.7.6/8.7.3) id OAA13062; Sat, 5 Jul 2003 14:07:01 +0200 (MET DST) X-Authentication-Warning: pauillac.inria.fr: majordomo set sender to owner-caml-list@pauillac.inria.fr using -f Received: from nez-perce.inria.fr (nez-perce.inria.fr [192.93.2.78]) by pauillac.inria.fr (8.7.6/8.7.3) with ESMTP id OAA16134 for ; Sat, 5 Jul 2003 14:07:00 +0200 (MET DST) Received: from mwinf0604.wanadoo.fr (smtp3.wanadoo.fr [193.252.22.25]) by nez-perce.inria.fr (8.11.1/8.11.1) with ESMTP id h65C6xT11220; Sat, 5 Jul 2003 14:06:59 +0200 (MET DST) Received: from ptit-gallu.home.net (AVelizy-112-1-13-44.w81-50.abo.wanadoo.fr [81.50.186.44]) by mwinf0604.wanadoo.fr (SMTP Server) with ESMTP id 9920E28000A2; Sat, 5 Jul 2003 14:06:58 +0200 (CEST) Received: from gallu.home.net ([192.168.0.12] helo=gallu) by ptit-gallu.home.net with smtp (Exim 3.35 #1 (Debian)) id 19Yloc-0007LR-00; Sat, 05 Jul 2003 14:06:54 +0200 Received: by gallu (sSMTP sendmail emulation); Sat, 5 Jul 2003 14:07:14 +0200 From: "Sylvain LE GALL" Date: Sat, 5 Jul 2003 14:07:14 +0200 To: Pierre Weis Cc: caml-list@inria.fr Subject: Re: [Caml-list] Printf and format Message-ID: <20030705120714.GA8202@gallu> References: <20030703163804.GA1207@gallu> <200307051026.MAA02389@pauillac.inria.fr> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <200307051026.MAA02389@pauillac.inria.fr> User-Agent: Mutt/1.5.4i X-Loop: caml-list@inria.fr X-Spam: no; 0.00; gall:01 le-gall:01 caml-list:01 printf:01 pierre:01 weis:01 scanf:01 fun'':01 implemented:01 gettext:01 compiler:01 caml:01 typechecking:01 05,:01 int:01 Sender: owner-caml-list@pauillac.inria.fr Precedence: bulk On Sat, Jul 05, 2003 at 12:26:49PM +0200, Pierre Weis wrote: > > Hello, > > > > I am sorry to ask a so silly question, but i need it for my personnal > > work, and i could not find it in the archive. > > > > Is there a way to transform string to ( 'a, out_channel, unit, unit) > > format. I need this function to use it with something like : > > > > Printf.printf (my_fun "X, Y") "coucou";; > > > > I look at the code and see a function scan_format, but it seems to be > > forbid to use it. > > > > Any idea ? > > > > Thanks > > Sylvain LE GALL > > As once announced on this list, the new release of Objective Caml will > introduce a lot of novelty on the format type. > > Besides new convertion specifiers that you could find in the Printf > and Scanf documentation (C, S, B, F, !, ...), there are now several > different new functionalities provided by the new compiler which are > relevant to your question: > > 0) converting arbitrary format string to a regular strings > > 1) converting CONSTANT strings to the corresponding constant format string > > 2) concatenating format strings (very often feature 0 and 1 are used > in conjonction just to implement format strings concatenation). > > Back to your problem: the features described here may your for some > ``my_fun'' functions, but the general case is not properly covered by > them. What we need is a general function that reads a format from > within a string that is NOT a constant. This is a kind of dynamic > convertion reminiscent of int_of_string or float_of_string, that > checks that the string can be indeed considered as an integer of > floatting point number. > > I propose (and have implemented for my own programming of a general > translation function) a new function [read_format], such that > > [read_format pat s] returns the string [s] as a format string that has > the same type (hence the same ``printf meaning'') as [pat], the first > format string argument. > > For instance, > > read_format "The number %d is odd" "Le nombre %d est impair" > > returns "Le nombre %d est impair" as a format string with the same > type as "The number %d is odd". > > This function is more general that the one above since now in > [read_format pat s] the string [s] is not mandatorily an immediate > string constant: it can be obtained from an arbitrary computation, as > read from a file. > > The Typechecking of read_format would be: > > read_format : > ('a, 'b, 'c, 'd) format -> string -> ('a, 'b, 'c, 'd) format > > If considered useful, this function could be added, for instance as > part of a new internationalization module. Hello, you read my mind. Indeed, the question concern an internationalization module ( let's call libgettext-ocaml ). It is basically a binding of gettext. But, for handling certain apsect of gettext it needs printf like capability. But the printf like capibility, as printf, use a non constant string ( returned by a function dngettext... or so ). That's the reason why i am looking after something which correpsond to this things. If people at INRIA could include some kind of read_format, it could be very useful. Thanks a lot Sylvain LE GALL ------------------- To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/ Beginner's list: http://groups.yahoo.com/group/ocaml_beginners