On Thursday, 14 November 2019 at 12:25:30 UTC, Robert M. Münch wrote:

From the docs, which I find extremly hard to understand:

auto csvReader(Contents = string, Malformed ErrorLevel = Malformed.throwException, Range, Separator = char)(Range input, Separator delimiter = ',', Separator quote = '"')


Contents, ErrorLevel, Range, and Separator are template (i.e. compile-time) parameters. Input, delimiter, and quote are function (i.e. runtime) parameters.


So, let's see if I can decyphre this, step-by-step by trying out:

        csv_records = csv_data.csvReader();


Here, you aren't providing any template parameters and only the first function parameter, so it's the equivalent to calling the function like so:

csvReader!(string, Malformed.throwException, typeof(csv_data), char)(csv_data, ',', '"');


Which indicates some problem because not all fields are set in my CSV data. So let's ignore any error by specifying Malformed.ignore;

        csv_records = csv_data.csvReader(Malformed.ignore);


csv_records = csv_data.csvReader!(string, Malformed.ignore)();




The docs state Malformed as 2nd parameter, since I use UFCS I assume that this becomes the first parameter. I don't


Malformed is the 2nd template parameter, your UFCS value is the first function parameter.

understand what the 3rd parameter (Range) is about.

Range is the type of the first parameter. It's common outside of Phobos use T and U for template types, but any valid symbol name can be used. This template has three type parameters which are named according to their purpose (Contents, Range, and Separator). Since Range is also the type of the first function parameter, the compiler will infer the type if you don't specify it.


4th parameter is my separator, which I need to set to ';' somehow.

The fourth _template_ parameter is the _type_ of your separator (and is set to default to char) not the actual separator. You want to set the delimiter, which is the second _function_ parameter.

csv_records = csv_data.csvReader!(string, Malformed.ignore)(';');

Reply via email to