Browse thread
[Caml-list] laconical input from a file for arrays and/or matrices
-
Khamenia, Valery
- samsaga2
- Richard Jones
- Issac Trotts
[
Home
]
[ Index:
by date
|
by threads
]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: | 2004-02-02 (15:54) |
From: | Issac Trotts <ijtrotts@u...> |
Subject: | Re: [Caml-list] laconical input from a file for arrays and/or matrices |
On Mon, Feb 02, 2004 at 11:42:18AM +0100, Khamenia, Valery wrote: > Hi OCaMLers, > > here goes my usual way to input ASCII matrices from file in C++: > > // ------- start of fragment ----------- > #include <iostream> > #include <vector> > using namespace std; > > void input_matrix(vector<vector<double > >&vec) { > int m, n; > cin >> m; > cin >> n; > vec.resize (m); > for( int i = 0; i<m; i++) > vec[i].resize(n); > for( int i = 0; i<m; i++) > for( int j = 0; j<n; j++) > cin >> vec[i][j]; > } > // -------- end of fragment ------------- > > then for matrix : > > 3 > 3 > 1 2 3 > 4 5 6 > 7 8 9 > > stored in ASCII text file mymatrix.dat > > i just run my program: > > % myprogram < mymatrix.dat > > and it is done. > > Thus, the few lines of code and i can apply all math I need. Here's a way to do it with camlp4. You get OCaml-style comments for free from Genlex this way: #load "camlp4o.cma";; open Genlex;; let input_matrix channel = let read_number = parser [< 'Int i >] -> float i | [< 'Float f >] -> f in let rec read_nums n = if n = 0 then parser [< >] -> [] else parser [< head=read_number; tail=read_nums (n-1) >] -> head::tail in let rec read_matrix_data m n = if m = 0 then parser [< >] -> [] else parser [< row = read_nums n; rest = read_matrix_data (m-1) n >] -> (Array.of_list row) :: rest in let read_matrix = parser [< 'Int m; 'Int n; rest >] -> let rows = read_matrix_data m n rest in Array.of_list rows in let charstream = Stream.of_channel channel in let lexer = Genlex.make_lexer [] charstream in read_matrix lexer;; input_matrix stdin;; -- Issac Trotts http://redwood.ucdavis.edu/~issac ------------------- 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