Task

Write two equal-sized numerical arrays 'x' and 'y' to
a two-column text file named 'filename'.

The first column of the file contains values from an 'x'-array with a
given 'xprecision', the second -- values from 'y'-array with 'yprecision'.

For example, considering:

   x = {1, 2, 3, 1e11};
   y = {1, 1.4142135623730951, 1.7320508075688772, 316227.76601683791}; 
                                                          /* sqrt(x) */
   xprecision = 3;
   yprecision = 5;

The file should look like:

   1    1
   2    1.4142
   3    1.7321
   1e+011   3.1623e+005

This task is intended as a subtask for Measure relative performance of sorting algorithms implementations.




 
-module( write_float_arrays ).
 
-export( [task/0, to_a_text_file/3, to_a_text_file/4] ).
 
task() ->
	File = "afile",
	Xs = [1.0, 2.0, 3.0, 1.0e11],
	Ys = [1.0, 1.4142135623730951, 1.7320508075688772, 316227.76601683791],
	Options = [{xprecision, 3}, {yprecision, 5}],
	to_a_text_file( File, Xs, Ys, Options ),
	{ok, Contents} = file:read_file( File ),
	io:fwrite( "File contents: ~p~n", [Contents] ).
 
to_a_text_file( File, Xs, Ys ) -> to_a_text_file( File, Xs, Ys, [] ).
 
to_a_text_file( File, Xs, Ys, Options ) ->
	Xprecision = proplists:get_value( xprecision, Options, 2 ),
	Yprecision = proplists:get_value( yprecision, Options, 2 ),
	Format = lists:flatten( io_lib:format("~~.~pg ~~.~pg~n", [Xprecision, Yprecision]) ),
	{ok, IO} = file:open( File, [write] ),
	[ok = io:fwrite( IO, Format, [X, Y]) || {X, Y} <- lists:zip( Xs, Ys)],
	file:close( IO ).
 