Mailing list for all users of the OCaml language and system.
 help / color / mirror / Atom feed
From: "Khamenia, Valery" <V.Khamenia@biovision-discovery.de>
To: "'Richard Jones'" <rich@annexia.org>,
	"Khamenia, Valery" <V.Khamenia@biovision-discovery.de>
Cc: "'caml-list@inria.fr'" <caml-list@inria.fr>
Subject: AW: [Caml-list] laconical input from a file for arrays and/or mat rices
Date: Mon, 2 Feb 2004 16:33:39 +0100	[thread overview]
Message-ID: <D15343265276D31197BC00A024A6C110774276@EXS_BDC> (raw)

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


             reply	other threads:[~2004-02-02 15:33 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-02-02 15:33 Khamenia, Valery [this message]
2004-02-02 15:41 ` Richard Jones
2004-02-02 16:03 AW: " Khamenia, Valery

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=D15343265276D31197BC00A024A6C110774276@EXS_BDC \
    --to=v.khamenia@biovision-discovery.de \
    --cc=caml-list@inria.fr \
    --cc=rich@annexia.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox