On 03/02/2012 02:01 PM, Yao Gomez wrote:
On Friday, 2 March 2012 at 21:50:12 UTC, tjb wrote:
Woops. I have a mistake in the code. Should be:

import std.stdio : writeln;
import std.stream;

void main() {
auto fin = new File("temp.csv");
char[] line;

int count;
while(!fin.eof()) {
line = fin.readLine();
writeln(line);
}
}

Thanks!

TJB

Check this module: http://dlang.org/phobos/std_csv.html

It can parse the CVS file content into a custom class/struct.

Thanks, that's very helpful.

1) I have modified the example from that module's documentation to take advantage of tuple expansions in foreach loops. Notice firstName, etc. instead of record[0], record[1], etc. (This is a relatively new feature.)

2) I've also used a struct instead of a tuple. (This is what TJB wants.)

3) And finally created an array of objects.

import std.csv;
import std.stdio;
import std.typecons;
import std.array;

struct Worker
{
    string firstName;
    string occupation;
    int amount;
}

void main()
{
    auto text = "Joe,Carpenter,300000\nFred,Blacksmith,400000\r\n";

    /* Take advantage of tuple expansion in foreach loops */
    foreach(firstName, occupation, amount;
            csvReader!(Tuple!(string,string,int))(text))
    {
        writefln("%s works as a %s and earns $%d per year",
                 firstName, occupation, amount);
    }

    /* Use a struct instead of a tuple */
    foreach (worker; csvReader!Worker(text)) {
        writeln("Worker in foreach: ", worker);
    }

    /* Make an array of Workers directly from the data */
    Worker[] workers = array(csvReader!Worker(text));
    writeln("Workers in array: ", workers);
}

Ali

Reply via email to