On Saturday, 6 January 2018 at 06:47:33 UTC, Vino wrote:
On Friday, 5 January 2018 at 18:00:34 UTC, thedeemon wrote:
On Friday, 5 January 2018 at 17:59:32 UTC, thedeemon wrote:
Tuple!( staticMap!(Arr, ColumnTypes) ) res; // array of
tuples
Sorry, I meant tuple of arrays, of course.
Hi Deemon,
Thank you very much, I tested your code, initially the code
did not produce the expected output, and found an issue in the
the key line of code as below, after updating the output was as
expected. Can you please let me know how to change the array
from standard array to container array.
auto ks = col.map!(v => col.countUntil(v)).array; // Your
code(col.countUntil)
auto ks = col.map!(v => vals.countUntil(v)).array; // Changed
code(vals.countUntil)
From,
Vino.B
Hi Deemon,
Was able to convert 50% of the code to container array and facing
some issue
import std.algorithm: countUntil, joiner, sort, uniq, map;
import std.csv: csvReader;
import std.stdio: File, writeln;
import std.typecons: Tuple, tuple;
import std.meta: AliasSeq;
import std.container.array;
alias ColumnTypes = AliasSeq!(string, string, int);
alias Arr(T) = Array!T;
auto readData() {
auto file =
File("C:\\Users\\bheev1\\Desktop\\Current\\Script\\Others\\TColRead.csv", "r");
Arr!(Tuple!ColumnTypes) res;
foreach (record;
file.byLineCopy.joiner("\n").csvReader!(Tuple!ColumnTypes))
{ res.insertBack(record); }
return tuple(res[]); // replace this line with writeln(res[]);
gives the expected output
}
auto compress(T)(Array!T col) {
Arr!int ks; Array!T vals;
vals.insertBack(sort(col.dup[]).uniq);
ks.insertBack(col.map!(v => vals.countUntil(v)));
return tuple(vals, ks);
}
void main() {
auto columns = readData();
foreach(i, ColT; ColumnTypes) { //Facing some
issue at this point
auto vk = compress(columns[i]);
writeln(vk[0][], vk[1][]);
}
}
From,
Vino.B