package core_extended
Module Delimited_kernel.Read
Read CSVs & CSV-like delimited formats (following the CSV quoting behaviour).
These formats are loosely documented by RFC 4180: https://www.ietf.org/rfc/rfc4180.txt
Row up to the error, and the field with the error up to the point of failure. Same as Expert.Parse_state.Bad_csv_formatting.
This provides an applicative interface for constructing values from a csv file.
An 'a t describes how to build an OCaml model 'a for each row.
Simple example:
type t =
{ foo : int
; bar : string
}
(* Describes how to generate a [t] from a row of a csv file *)
let parse : t Delimited_kernel.Parse.t =
let open Delimited_kernel.Parse.Let_syntax in
let%map_open foo = at_header "foo" ~f:Int.of_string
and bar = at_header "bar" ~f:String.of_string in
{ foo; bar }
;;
let _ =
Delimited_kernel.Parse.list_of_string ~header:`Yes parse
"foo,bar\n2,\"hello, world\"\n"
;;include Core_kernel.Applicative.S with type 'a t := 'a t
val return : 'a -> 'a tmodule Applicative_infix : sig ... endmodule Open_on_rhs_intf : sig ... endinclude Core_kernel.Applicative.Let_syntax
with type 'a t := 'a t
with module Open_on_rhs_intf := Open_on_rhs_intf
module Let_syntax : sig ... endval at_index : int -> f:(string -> 'a) -> 'a tRead a field at the given index. Use f to convert the field from string.
val at_header : string -> f:(string -> 'a) -> 'a tRead a field at the given header. Use f to convert the field from string.
Note that if the given header is not provided through either the file or the ~header argument to the parsers, this will fail at runtime.
val at_header_opt : string -> f:(string option -> 'a) -> 'a tRead a field at the given header, if it exists. Use f to convert the field from string.
module On_invalid_row : sig ... endmodule Header : sig ... endHeader parsing control
module Row : sig ... endWhole-row parsing.
val fold_string :
?strip:bool ->
?sep:char ->
?quote:[ `No_quoting | `Using of char ] ->
?header:Header.t ->
?on_invalid_row:'a On_invalid_row.t ->
'a t ->
init:'b ->
f:('b -> 'a -> 'b) ->
string ->
'bFold the CSV rows contained in the given string.
val list_of_string :
?strip:bool ->
?sep:char ->
?quote:[ `No_quoting | `Using of char ] ->
?header:Header.t ->
?on_invalid_row:'a On_invalid_row.t ->
'a t ->
string ->
'a listLoad the CSV as a list
module Expert : sig ... endExperts only. If you really think you need a function in this module, please talk to a delimited dev first.