On 10/2/22 21:48, mw via Digitalmars-d-learn wrote:
```
         text.csvReader!Layout(["b","c","a"]);  // Read only these column
```

The intention is very clear: only read the selected columns from the csv, and 
for any other fields of class Layout, just ignore (with the default D .init 
value).


Here's why it's not currently working:

"An optional header can be provided. The first record will be read in as the header. 
If Contents is a struct then the header provided is expected to correspond to the fields 
in the struct."

"expected to correspond" means that the number of fields in the content struct 
can't exceed the header element count as you can see in the actual code [1]:

```
foreach (ti, ToType; Fields!(Contents))
{
    if (indices[ti] == colIndex) // indices.length depends on passed in 
colHeaders.length
    ...
}
```

The current index exception is bad, this needs an assert in the constructor 
with a nicer error message.

But say, I'm curious, what's the purpose of adding an optional/useless contents 
field? What's the use-case here?

[1] 
https://github.com/dlang/phobos/blob/8e8aaae5080ccc2e0a2202cbe9778dca96496a95/std/csv.d#L1209

Reply via email to