Hello,

I am new with D and want to convert a c program for a csv file manipulation with exhaustive dynamic memory mechanics to D .

When reading a CSV-file line by line I would like to create an associative array to get the row values by the value in the second column. Although I save the rows in an array (to get different pointers to the values) the program below always gives the last row.
I am sure someone could help.

    thanks


    void main( string args[])
    {
auto file = File("transpatch2_orig.csv"); // Open for reading
        auto range = file.byLine();
        // Print first three lines
        foreach (line; range.take(1))
            writeln(line);
        auto i=0;

        char [][] [string] orgids;
        char [][][] rows;
        foreach (line; range)
        {
            if (!line.empty)
            {
               // auto row = line.split(";");
                rows ~= (line.split(";"));
                string word = rows[$ - 1][1].idup;
                if(word.length>0 && word[0] == '\"')
                        word= word[1 .. $-1];
                orgids[word.idup]=rows[$ - 1];
                i++;
            }
        }

        writeln( orgids.length);
        writeln( args[1],orgids[args[1]]);
        writeln( args[2],orgids[args[2]]);
        writeln("Lines: ",i);
    }

Reply via email to