Azzera filtri
Azzera filtri

how to read a file like a table

1 visualizzazione (ultimi 30 giorni)
David Pesetsky
David Pesetsky il 25 Lug 2016
Commentato: dpb il 25 Lug 2016
Hello,
I'm looking to read double precision data from a file, in however many columns it is, and to the end of file. The result should be a N x M double.
i.e. if I paste this in the Matlab window, I get what I need:
table=[
1016.6 0 0 0 0 0 0 0
1016.6 0 0 0 0 0 0 0
0 -479.528 0 0 0 0 0 0
0 468.718 0 0 0 0 0 0
0 0 -385.346 0 0 0 0 0
0 0 696.118 0 0 0 0 0
0 0 0 -7591 0 0 0 0
0 0 0 7591 0 0 0 0
0 0 0 0 -7573.16 0 0 0
0 0 0 0 7573.16 0 0 0
0 0 0 0 0 -2620.704 0 0
0 0 0 0 0 4134 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 1022.074 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 7701.638
];
That gives a 16x8 double.
But in the file would be just the values, as shown.
Some form of fscan maybe, but with generalized format?
Thanks for unconfusing me...
Dave

Risposta accettata

dpb
dpb il 25 Lug 2016
Use textscan without an explicit format string--that's a magic incantation that will return the data in the same shape as is in the file for regular files of all numeric data.
data=cell2mat(textscan(fid,'','collectoutput',1));
Add any additional parameters needed for delimiter, missing value, headerlines, etc., etc., ...
Or, dlmread will also return the proper shape for those files which it can handle (which generally includes those for which the above textscan "trick" will work.
Since R2013b there's readtable which will leave you with a table dataset rather than an array so whether that is/is not an advantage depends on what you're going to be doing with the data.
  2 Commenti
David Pesetsky
David Pesetsky il 25 Lug 2016
Thank you. I like tricks of the trade :)
dpb
dpb il 25 Lug 2016
It's undocumented for textscan; there's an example with empty string for the format string in textread still altho it's not mentioned there. I learned it functioned for textscan by accident when using the same idiom had learned from textread by habit, not by design initially.
It's a very important feature that deserves to be "shouted from the rooftop" as it ameliorates an otherwise painful problem if one doesn't know the number of elements/record plus the need for the abomination of a format string of some N repeating fields to force the proper count. In lieu of that, it's do another reshape after reading into a single column.

Accedi per commentare.

Più risposte (0)

Tag

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by