(* csv.ml - comma separated values parser
*
- * $Id: csv.ml,v 1.11 2006-07-19 09:41:58 rich Exp $
+ * $Id: csv.ml,v 1.12 2006-10-18 14:56:12 rich Exp $
*)
(* The format of CSV files:
let c = compare_row [] y in
if c <> 0 then c else compare [] ys
+(* Concatenate - arrange left to right. *)
+let rec concat = function
+ | [] -> []
+ | [csv] -> csv
+ | left_csv :: csvs ->
+ (* Concatenate the remaining CSV files. *)
+ let right_csv = concat csvs in
+
+ (* Set the height of the left and right CSVs to the same. *)
+ let nr_rows = max (lines left_csv) (lines right_csv) in
+ let left_csv = set_rows nr_rows left_csv in
+ let right_csv = set_rows nr_rows right_csv in
+
+ (* Square off the left CSV. *)
+ let left_csv = square left_csv in
+
+ (* Prepend the right CSV rows with the left CSV rows. *)
+ List.map (
+ fun (left_row, right_row) -> List.append left_row right_row
+ ) (List.combine left_csv right_csv)
+
let to_array csv =
Array.of_list (List.map Array.of_list csv)
(** csv.mli - comma separated values parser
*
- * $Id: csv.mli,v 1.8 2006-02-23 15:24:25 rich Exp $
+ * $Id: csv.mli,v 1.9 2006-10-18 14:56:12 rich Exp $
*)
type t = string list list
* look the same if opened in a spreadsheet program.
*)
+val concat : t list -> t
+(** Concatenate CSV files so that they appear side by side, arranged
+ * left to right across the page. Each CSV file (except the final
+ * one) is first squared.
+ *
+ * (To concatenate CSV files so that they appear from top to bottom,
+ * just use {!List.concat}).
+ *)
+
val to_array : t -> string array array
val of_array : string array array -> t
(** Convenience functions to convert to and from a matrix representation.