Opinions on iterating a struct to absorb the decoding of a CSV?

Andy Valencia dont at spam.me
Thu Mar 28 17:23:39 UTC 2024


I wanted a lightweight and simpler CSV decoder.  I won't post the 
whole thing, but basically you instantiate one as:

struct Whatever {
    ...
}
...
     f = File("path.csv", "r");
     auto c = CSVreader!Whatever(f);
     foreach (rec; c) { ...

CSVreader is, of course, templated:

struct CSVreader(T) {
     ...
}

and the innermost bit of CSVreader is:

     auto t = T();
     foreach (i, ref val; t.tupleof) {
         static if (is(typeof(val) == int)) {
             val = this.get_int();
         } else {
             val = this.get_str();
         }
     }
     return t;

So you cue off the type of the struct field, and decode the next 
CSV field, and put the value into the new struct.

Is there a cleaner way to do this?  This _does_ work, and gives 
me very compact code.



More information about the Digitalmars-d-learn mailing list