I have a .vff file wich I open :
fid = fopen('test.vff');
The header is as follows:
ncaa;
rank=3;
type=raster;
format=slice;
bits=32;
bands=1;
size=256 256 256;
I want to extract size as a variable. So far I've tried:
size = fgetl(fid)
7 times in a row to get to the correct line, but the output I get is a char variable:
size =
'size=256 256 256;'
Instead of an array.
Thanks
CG

1 件のコメント

Stephen23
Stephen23 2019 年 7 月 31 日
編集済み: Stephen23 2019 年 7 月 31 日
Do NOT use size as a variable name, as doing so shadows the very important size function!
Shadowing inbuilt functions is a common cause of bugs.

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

 採用された回答

Adam Danz
Adam Danz 2019 年 7 月 30 日
編集済み: Adam Danz 2019 年 7 月 31 日

0 投票

Once you have that string, convert it to a vector like this.
s = 'size=256 256 256;';
s(~isstrprop(s,'digit')) = ' ';
d = str2num(s)
% result
% d =
% 256 256 256
Option 2 (update after Stephen's good point below).
s = 'size=256 256 256;';
d = str2double(regexp(s,'\d+','match'))
Note that this will work even if the number of dimensions in 'size' changes (size = 256 256).

2 件のコメント

Charles Gauthier
Charles Gauthier 2019 年 7 月 30 日
It worked! Thanks
Stephen23
Stephen23 2019 年 7 月 31 日
編集済み: Stephen23 2019 年 7 月 31 日
Note that str2num relies on eval.

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

その他の回答 (1 件)

Stephen23
Stephen23 2019 年 7 月 31 日
編集済み: Stephen23 2019 年 7 月 31 日

0 投票

A very simple and very efficient method without eval and without shadowing the inbuilt size:
>> str = 'size=256 256 256;';
>> vec = sscanf(str,'size=%f%f%f')
vec =
256
256
256

カテゴリ

ヘルプ センター および File ExchangeData Import and Analysis についてさらに検索

質問済み:

2019 年 7 月 30 日

編集済み:

2019 年 7 月 31 日

Community Treasure Hunt

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

Start Hunting!

Translated by