[vox-tech] c code question

harke rharke at earthlink.net
Thu Mar 20 12:43:18 PDT 2008


On Thursday 20 March 2008 11:55, Carl Boettiger wrote:
> Hi,
>
> This isn't a linux question directly but I'm going to abuse the
> generosity and knowledge on this list and ask anyway:
>
> I'm running a c code where I'd like to print out data to a file in a
> matrix form.  I run a loop that fills in each entry of a column, which
> I print to a file fprintf(file, "%.5e\n", variable). When the loop
> starts again, I'd like to print the next set in an adjacent column,
> rather than under the existing data.  (currently I import the file
> into matlab and use reshape to convert the long vector into a matrix,
> but this doesn't work if the vectors are of different lengths).  Hope
> that made sense.  Any ideas?  Thanks!
>
> -Carl
You pretty much have to write all the columns in a row at one time.
It is possible to rewind a file, of course, but since each record
would be getting longer on each pass this approach would get real ugly
real fast.
A number of questions come up. Is the size of the matrix fixed
or variable? Is it a small number or could it be very large?
If the size is small and fixed, just change the loop to loop over
rows and change the fprintf to write the proper number of  columns.

But now that I have had 5 minutes to think, I would suggest the
following:
     outer loop over the rows
     inner loop over the columns
inside the inner loop, assemble the record by appending to a string
after exiting the inner loop but still in the outer loop, write the string
to the file
This should work even for very large values of matrix size.

Richard Harke


More information about the vox-tech mailing list