std.csv.csv_reader
- multiple declarations
- Function csvReader
- Function csvReader
- Function csvReader
Function csvReader
Returns an input
range for iterating over records found in
.
input
The Contents
of the input
can be provided if all the records are the
same type such as all integer data:
string str = 76,26,22
;
int[] ans = [76,26,22];
auto records = csvReader!int(str);
foreach(record; records)
{
assert(equal(record, ans));
}
Example using a struct with modified delimiter
:
string str = "Hello;65;63.63\nWorld;123;3673.562"; struct Layout { string name; int value; double other; } auto records = csvReader!Layout(str,';'); foreach(record; records) { writeln(record.name); writeln(record.value); writeln(record.other); }
Specifying ErrorLevel
as Malformed.ignore
will lift restrictions
on the format. This example shows that an exception is not thrown when
finding a quote
in a field not quoted.
string str = "A \" is now part of the data"; auto records = csvReader!(string,Malformed.ignore)(str); auto record = records.front; assert(record.front == str);
Prototype
auto csvReader(Contents, std.csv.Malformed ErrorLevel, Range, Separator)( Range input, Separator delimiter = ',', Separator quote = '"' ) if (isInputRange!Range && is(Unqual!(ElementType!Range) == dchar) && isSomeChar!Separator && !is(Contents T : T[U], U : string));
Returns
An input
range R as defined by
std.range.primitives.isInputRange
. When Contents
is a
struct, class, or an associative array, the element type of R is
Contents
, otherwise the element type of R is itself a range with
element type Contents
.
Throws
CSVException
When a quote
is found in an unquoted field,
data continues after a closing quote
, the quoted field was not
closed before data was empty, a conversion failed, or when the row's
length does not match the previous length.
HeaderMismatchException
when a header is provided but a
matching column is not found or the order did not match that found in
the input
. Read the exception documentation for specific details of
when the exception is thrown for different types of Contents
.
Function csvReader
An optional
can be provided. The first record will be read in
as the header
header
. If Contents
is a struct then the header
provided is
expected to correspond to the fields in the struct. When Contents
is
not a type which can contain the entire record, the
must be
provided in the same order as the header
input
or an exception is thrown.
Read only column "b":
string str = "a,b,c\nHello,65,63.63\nWorld,123,3673.562"; auto records = csvReader!int(str, ["b"]); auto ans = [[65],[123]]; foreach(record; records) { assert(equal(record, ans.front)); ans.popFront(); }
Read from header
of different order:
string str = "a,b,c\nHello,65,63.63\nWorld,123,3673.562"; struct Layout { int value; double other; string name; } auto records = csvReader!Layout(str, ["b","c","a"]);
The header
can also be left empty if the input
contains a header
but
all columns should be iterated. The header
from the input
can always
be accessed from the header
field.
string str = "a,b,c\nHello,65,63.63\nWorld,123,3673.562"; auto records = csvReader(str, null); assert(records.header == ["a","b","c"]);
Prototype
auto csvReader(Contents, std.csv.Malformed ErrorLevel, Range, Header, Separator)( Range input, Header header, Separator delimiter = ',', Separator quote = '"' ) if (isInputRange!Range && is(Unqual!(ElementType!Range) == dchar) && isSomeChar!Separator && isForwardRange!Header && isSomeString!(ElementType!Header));
Returns
An input
range R as defined by
std.range.primitives.isInputRange
. When Contents
is a
struct, class, or an associative array, the element type of R is
Contents
, otherwise the element type of R is itself a range with
element type Contents
.
The returned range provides a header
field for accessing the header
from the input
in array form.
string str = "a,b,c\nHello,65,63.63"; auto records = csvReader(str, ["a"]); assert(records.header == ["a","b","c"]);
Throws
CSVException
When a quote
is found in an unquoted field,
data continues after a closing quote
, the quoted field was not
closed before data was empty, a conversion failed, or when the row's
length does not match the previous length.
HeaderMismatchException
when a header
is provided but a
matching column is not found or the order did not match that found in
the input
. Read the exception documentation for specific details of
when the exception is thrown for different types of Contents
.
Function csvReader
Prototype
auto csvReader(Contents, std.csv.Malformed ErrorLevel, Range, Header, Separator)( Range input, Header header, Separator delimiter = ',', Separator quote = '"' ) if (isInputRange!Range && is(Unqual!(ElementType!Range) == dchar) && isSomeChar!Separator && is(Header : typeof(null)));
Example
import std.algorithm;
string str = 76;^26^;22
;
int[] ans = [76,26,22];
auto records = CsvReader!(int,Malformed.ignore,string,char,string[])
(str, ';', '^');
foreach(record; records)
{
assert(equal(record, ans));
}
Authors
Jesse Phillips