On Tuesday, 9 January 2018 at 17:41:10 UTC, Vino wrote:
On Tuesday, 9 January 2018 at 17:00:05 UTC, thedeemon wrote:
On Tuesday, 9 January 2018 at 13:49:41 UTC, Vino wrote:
Hi All,

It is possible to store struct in a array ans use the same in csvReader

Sure, you can just pass the type of your struct to csvReader:

struct Layout { string name; int value; double other; }

auto readArrayOfStructs(string fname) {
    Array!Layout res;
    foreach(record; fname.readText.csvReader!Layout('\t')) {
        res ~= record;
    }
    return res;
}

Hi Deemon,

Thank you, and sorry for the confusion, the requirement is as below

auto reader(T) (Array!T T1s, T fname) {
auto uFile = File(fName, "r");
foreach (record; uFile.byLineCopy().joiner("\n").csvReader!(Tuple!T1s)) // receive the type and fetch the record
writeln(record);
}

void main () {
auto fName = "C:\\Users\\bheev1\\Desktop\\Current\\Script\\Others\\Table1.csv";
struct T1 { string Name; string Country; int Age; }
Array!T1 T1s;
reader(fName, T1s); // pass the array Type as a function parameter
}


From,
Vino.B

Details

For example let say we have 3 struct
auto read(T) (T Filename, T ArrayType) {
T ArrayType res;
foreach (record; Filename.byLineCopy().joiner("\n").csvReader!(T)(Tuple!ArrayType))
foreach(i, T; ColumnTypes) { res[i].insert(record[i]); }
        }
        return res;
}

void main () {

struct S1 { }
struct S2 { }
struct S3 { }

Get user input(UI)
if(UI == S1) {
Array!S1 T1;
writeln(read(File1, Array Type));
}

From,
Vino.B


Reply via email to