package core_extended
Module Delimited_kernel.ReadSource
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
include Core_kernel.Applicative.Let_syntax
with type 'a t := 'a t
with module Open_on_rhs_intf := Open_on_rhs_intf
Read a field at the given index. Use f to convert the field from string.
Read 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.
Read a field at the given header, if it exists. Use f to convert the field from string.
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
val read_lines :
?strip:bool ->
?sep:char ->
?quote:[ `No_quoting | `Using of char ] ->
?header:Header.t ->
?on_invalid_row:'a On_invalid_row.t ->
'a t ->
Core_kernel.In_channel.t ->
'a listRead CSV file.