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