Reading a csv file

Nathan M. Swan nathanmswan at gmail.com
Mon Aug 13 11:49:54 PDT 2012


On Saturday, 11 August 2012 at 14:45:28 UTC, Andrew wrote:
> On Fri, 10 Aug 2012 03:44:11 +0200, Jesse Phillips wrote:
>
>> On Friday, 10 August 2012 at 01:39:32 UTC, Andrew wrote:
>>> I'm trying to read in a csv file. The examples in the docs 
>>> for std.csv
>>> all assume you're reading from a string rather than a file.
>> 
>> It requires a range of dchar. I believe there is an 
>> undocumented
>> function to get a dchar range out of a File, but as it is
>> undocumented...
>> 
>> std.file.readText() will be your friend.
>
> This works perfectly, and thank you. I've since run into 
> something
> peculiar. Here's my csv loader. It stuffs a csv file into an 
> associative
> array containing structs of an arbitrary type, so long as the 
> struct
> defines csvid(), which is needed to tell it what to use as the 
> array key:
>
> T[string] loadcsvtable(T)(string filename)
> {
> 	string input = readText(filename);
> 	auto records = csvReader!T(input, null);
> 	T[string] table;
>
> 	foreach(record; records)
> 		table[record.csvid] = record;  <---NOTE record.csvid
> 	return table;
> }
>
> Only I forgot the parenthesis on csvid()...and it still works. 
> And I
> can't figure out why. I know you can do this sort of thing with
> @property, but the method definition doesn't have @property set.
>
> I'm not precisely complaining, but something's going on here I 
> don't
> understand.

Without the -property switch, you can use non- at property functions 
as if they were @property. This is supposed to eventually be 
deprecated, so I try to not do this.


More information about the Digitalmars-d-learn mailing list