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

Reply via email to