(** csv.mli - comma separated values parser
*
- * $Id: csv.mli,v 1.6 2005-11-25 14:06:58 rich Exp $
+ * $Id: csv.mli,v 1.8 2006-02-23 15:24:25 rich Exp $
*)
type t = string list list
(** Make the CSV data "square" (actually rectangular). This pads out
* each row with empty cells so that all rows are the same length as
* the longest row. After this operation, every row will have length
- * {!columns}.
+ * {!Csv.columns}.
*)
val is_square : t -> bool
* The returned CSV will be square.
*)
+val compare : t -> t -> int
+(** Compare two CSV files for equality, ignoring blank cells at the end
+ * of a row, and empty rows appended to one or the other. This is
+ * "semantic" equality - roughly speaking, the two CSV files would
+ * look the same if opened in a spreadsheet program.
+ *)
+
val to_array : t -> string array array
val of_array : string array array -> t
(** Convenience functions to convert to and from a matrix representation.
* etc. ]
* v}
*
- * Each row is turned into an assoc list (see {!List.assoc}).
+ * Each row is turned into an assoc list (see [List.assoc]).
*
* If a row is too short, it is padded with empty cells ([""]). If
* a row is too long, it is truncated.
val print_readable : t -> unit
(** Print the CSV data to [stdout] in a human-readable format. Not much
* is guaranteed about how the CSV is printed, except that it will be
- * easier to follow than a "raw" output done with {!print}. This is
+ * easier to follow than a "raw" output done with {!Csv.print}. This is
* a one-way operation. There is no easy way to parse the output of
* this command back into CSV data.
*)
val save_out_readable : out_channel -> t -> unit
-(** As for {!print_readable}, allowing the output to be sent to a channel. *)
+(** As for {!Csv.print_readable}, allowing the output to be sent to a channel.
+ *)