Simple file manipulation

Tyro[a.c.edwards] nospam at home.com
Wed May 20 20:44:45 PDT 2009


On 5/20/2009 6:19 PM, BLS wrote:
> Sam Hu wrote:
>> I looked up in D2 in std.stdio,std.file,std.cstream and std.stream and
>> try to find a very simple method which can read from a file once a
>> value other than once an entire row.I just can not find it maybe this
>> idea is wrong.Say how to simply read & write key/value pairs to and
>> from a file like this format:
>>
>> //file "data.dat"
>> Tommy M 22
>>
>> where the keys are name,gender and age while the values are Tommy,M ,22.
>>
>> I found there is methods that can read from a file once an entire
>> row.But is there a simple method which can read once a value?In C++
>> one can do like this:
>>
>> #include <iosteam>
>> #include <fstream>
>> using namespace std;
>> ifstream inData;
>> inData.open("data.dat");
>> inData>>name;
>> inData>>gender;
>> inData>>age;
>>
>> cout<<"Info:"<<endl
>> <<"Name:"<<name<<endl
>> <<"Gender:"<<gender<<endl
>> <<"Age:"<<age<<endl;
>>
>>
>>
>
> IN D2 you can use std.file and slurp (cool name, beside)
> slurp reads an entire file into an array.
>
> // Load file; each line is an string followed by whitespace , another
> //string followed by whitespace and a int.
>
> auto a = slurp!(string, string, int)("data.dat", "%s %s %s");
>
> Now you can go on an play a bit with the new range stuff. (std.range)
>
> Enjoy, Björn

Unfortunately, that will not work. DMD fails with a Stack Overflow 
whenever upon encountering any of the string types (dstring, string, 
char[], wstring, etc...) being passed to this template. Works fine or 
other types as far as I can tell (including arrays).


import std.file;

void main()
{
	auto a = slurp!(string)("", "%s");
}

results in Stack Overflow during compilation.


More information about the Digitalmars-d-learn mailing list