D-styled data file

Georg Wrede georg.wrede at iki.fi
Wed Apr 29 10:30:16 PDT 2009


Saaa wrote:
>>> I'm still dangling between a full parsing at load and parse on demand.
>>> A parse on demand (get) would do the following steps:
>>> Get the type of the variable in which the data must be stored (in string 
>>> format)
>>> Search for this type in every line of the char[][], when found check 
>>> whether the name is the same
>>> and then convert the chars to that type and place the data in the 
>>> variable.
>> This sounds complicated. Can you decide the input file format? Or is it 
>> from some other program that you can't change?
> 
> The input file format would be like D
> Like file.dat from the original post.
> I just often have the need to save large arrays and other variables and I 
> thought
> why not just save them like the way I would use them in my modules.

Err, ok, lemme assume this is kind-of like a scrapbook thing. You 
collect nice arrays, filled data structures and the like. And the you'd 
want to read them into your programs.

Now, to know how to use the stuff, the program would need to not only be 
able to handle the data structures, but also know their names. Sure, you 
could have a parser that returns first the name of the thing, and then 
the thing itself. But then, to use it, you probably couldn't have an 
Universal program. Rather, you'd have to write the program different for 
each time you decide to use a particular item from the scrap book.

Which actually leads us to another simple solution. Why not write your 
scrapbook simply in total D format, and then include it in the program?

>> Suppose you already had this get function. How would you use it? An 
>> example would help.
> 
> I use the get functions a few posts back, in the main:
> 
> ---
> void main()
> {
>  char[] filename = `data.dat`;
>  char[][] file;
> 
>  try{
>   file = splitlines( cast(char[])read(filename) );
>  }
>  catch{
>   throw new Exception("Couldn't load : " ~ filename);
>  }
> 
>  DData file_dd = new DData(file);
>  int i;
>  file_dd.get(`i`, i);
> }
> ---
> 
> The data.dat should have a line like this to work:
> --- data.dat
> int i = 10;
> ---

So here main has to know that there will be a variable i in the data 
file, then get it, then presumably assign the value to the here defined 
"int i;". This way you have to do everything (and more) you would if you 
were to rename data.dat to data.d, include it, and then just use the 
variables.

> I hope it all makes sense :) 

So, either I still don't get it, or you're doing Double Thinking. A 
picture might clarify:

http://ocw.mit.edu/NR/rdonlyres/A166EB14-E7FD-473F-98FB-741A9817540C/0/chp_triangle.jpg

It's very often that programmers spend time attempting to do something 
that is possible, but when it comes down to it, it either isn't, or it 
takes an inordinate amount of work /compared/ to the value of the goal.





More information about the Digitalmars-d-learn mailing list