[vox-tech] c code question

Matt Holland mdholland at ucdavis.edu
Fri Mar 21 10:24:56 PDT 2008


Carl,

Here's what you do:

Write your columns as rows.  Don't worry about whether some are longer 
than others, just precede each element with a single space or tab 
(whitespace at the beginning of the file will be ignored when you import 
the file into Matlab, at the end it will be interpreted as a missing 
value), and print a newline after the last element.  You'll end up with 
a file that may or may not have the same number of elements in each 
row.  If you read this into Matlab with dlmread(), it will pad the rows 
out with zeros to the length of the longest row.  If zeros are OK, then 
transpose the array, and you've got your columns:

 >> M = dlmread('/path/to/file.txt');
 >> M = M';

If you want to be able to distinguish the missing values from real zeros 
in the data, then use textread() in Matlab:

 >> M = textread('/path/to/file.txt', '', 'emptyvalue', NaN);
 >> M = M';

And you're golden.  The second argument in the textread() call is an 
empty string, NOT a double quotation mark.

Matt

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
> _______________________________________________
> vox-tech mailing list
> vox-tech at lists.lugod.org
> http://lists.lugod.org/mailman/listinfo/vox-tech
>
>   


More information about the vox-tech mailing list