フィルターのクリア

how to read a file like a table

1 回表示 (過去 30 日間)
David Pesetsky
David Pesetsky 2016 年 7 月 25 日
コメント済み: dpb 2016 年 7 月 25 日
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

採用された回答

dpb
dpb 2016 年 7 月 25 日
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 件のコメント
David Pesetsky
David Pesetsky 2016 年 7 月 25 日
Thank you. I like tricks of the trade :)
dpb
dpb 2016 年 7 月 25 日
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.

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeText Files についてさらに検索

タグ

Community Treasure Hunt

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

Start Hunting!

Translated by