caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
* AW: [Caml-list] laconical input from a file for arrays and/or mat rices
@ 2004-02-02 15:33 Khamenia, Valery
  2004-02-02 15:41 ` Richard Jones
  0 siblings, 1 reply; 2+ messages in thread
From: Khamenia, Valery @ 2004-02-02 15:33 UTC (permalink / raw)
  To: 'Richard Jones', Khamenia, Valery; +Cc: 'caml-list@inria.fr'

Hi Rich and all,

> Probably not quite what you want, but I have a library for reading and
> writing comma-separated values (CSV) files here:
> http://www.merjis.com/developers/csv/
> http://www.merjis.com/developers/csv/ocaml-csv-1.0.1.tar.gz

thank you, it would be interesting what's the skeleton idea 
behind your code, but I can't get it after first apporoach :)

Actually, to emulate behaviour of C++ expression 
"cin >> mydoublevar" I use function cin_float 
instead of read_float:

(* ---------- START -----------*)
exception EOF of string

let max = 4096
let buf = String.create max
and wbuf = Buffer.create 64
and cin_float_i = ref 0 
and cin_float_n = ref 0

let rec scan_words i n inword =
  if i < n then
    let c = buf.[i] in
    if c!=' ' && c!='\n' && c != '\t' then begin
      Buffer.add_char wbuf c;
      scan_words (i + 1) n true
    end
    else if inword then begin
      let word = Buffer.contents wbuf in       
      Buffer.clear wbuf;
      cin_float_i:=i+1;
      cin_float_n:=n;
      float_of_string word
    end
    else scan_words (i + 1) n false
  else
    let nread = input stdin buf 0 max in
    if nread <> 0 then scan_words 0 nread inword
    else raise (EOF "reading after the end of file");;

let cin_float() = scan_words (!cin_float_i) (!cin_float_n) false;;

(* 
   test:
   Printf.printf "%f %f " (cin_float()) (cin_float()); 
*)
(* ---------- START -----------*)

However it is error-prone even for single-thread 
applications.

Indeed, after call of cin_float some symbols could megrate 
from stdin into the buffer "buf". For this reason in the 
client code after calling "cin_float" the functions like 
"read_float()" will not find all those 
symbols which have been moved into my buffer already.

Decentralized buffers :(

Now, "read_float" is actually a composition:

 float_of_string (read_line())

and "read_line" is just

 flush_stdout; input_line stdin

Thus, to avoid non-decentralized buffers one should 
access stateful "stdin" channel. 
Is "stdin" object in OCaML standardized?..

Maybe you, Rich, have a better idea.

P.S. BTW, I was impressed by a spam level in 
     ocaml-list in Jan 2004. Why posts are not 
     allowed only for a subscribers (or even 
     better for veryfied emails) ?..

--
vak

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


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

* Re: [Caml-list] laconical input from a file for arrays and/or mat rices
  2004-02-02 15:33 AW: [Caml-list] laconical input from a file for arrays and/or mat rices Khamenia, Valery
@ 2004-02-02 15:41 ` Richard Jones
  0 siblings, 0 replies; 2+ messages in thread
From: Richard Jones @ 2004-02-02 15:41 UTC (permalink / raw)
  To: Khamenia, Valery; +Cc: 'caml-list@inria.fr'

On Mon, Feb 02, 2004 at 04:33:39PM +0100, Khamenia, Valery wrote:
> Hi Rich and all,
> 
> > Probably not quite what you want, but I have a library for reading and
> > writing comma-separated values (CSV) files here:
> > http://www.merjis.com/developers/csv/
> > http://www.merjis.com/developers/csv/ocaml-csv-1.0.1.tar.gz
> 
> thank you, it would be interesting what's the skeleton idea 
> behind your code, but I can't get it after first apporoach :)

Can you define the problem some more?

Do you have lots of existing files in this particular format which
you'd like to be able to read?  Or are you just looking for a reliable
way to store and load your program data?

If you've got a lot of existing files that you must read in, then
you'll obviously need to write or find a reader for that format.

If you're just looking around for a suitable format for storing and
loading your data, then locate some existing code which already does
this and just use that.  One possibility is indeed CSV, which, despite
its origins in the DOS world, turns out to be quite a useful and
reliable format.  Another is using input/output matrix functions.

You could also try converting from the space-separated format to CSV
format using either a quick Perl script, or even using a spreadsheet
program -- most spreadsheets will let you read in the space-separated
format and write it out in CSV format, which can then be read using
the ocaml-csv library.

Rich.

-- 
Richard Jones. http://www.annexia.org/ http://www.j-london.com/
Merjis Ltd. http://www.merjis.com/ - improving website return on investment
"One serious obstacle to the adoption of good programming languages is
the notion that everything has to be sacrificed for speed. In computer
languages as in life, speed kills." -- Mike Vanier

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


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

end of thread, other threads:[~2004-02-02 15:41 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2004-02-02 15:33 AW: [Caml-list] laconical input from a file for arrays and/or mat rices Khamenia, Valery
2004-02-02 15:41 ` Richard Jones

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