フィルターのクリア

Separating values in cell arrays

1 回表示 (過去 30 日間)
ugur uresin
ugur uresin 2018 年 7 月 1 日
コメント済み: Jan 2018 年 7 月 1 日
Suppose, one of the my columns in my excel data as follows:
'G1(f1) : Resulting Value = 0.5'
'G1(f2) : Resulting Value = 1'
'G1(f3) : Resulting Value = 1.5'
'G1(f4) : Resulting Value = 2'
.
.
.
'G1(f8) : Resulting Value = 4'
I'd like to separate the values that 0.5, 1 ... 4 as double!
I have tried the code below:
plotdata=xlsread('S:/PLOT/PLOT.xlsx');
[num, txt] = xlsread('S:/PLOT/PLOT.xlsx', 'B4:B43');
[rows,cols]=size(txt);
uplim=plotdata(2,2); %this cell gives number of 'Resulting Value's
k=1;
for i=4:uplim+4-1
[dummy(k), txt(k)] = strtok(txt(k), '=');
mylist(k)=strtok(txt(k),'= ');
k=k+1;
i=i+1;
end
This code gives "mylist" as 1x8 cell!
THE PROBLEM is that I can not use "mylist" for arithmetic operations. How can I turn "mylist" from cell to a matrix or a vector that I can use for arithmetic operations.
Or I'm open to new codes to separate the values that 0.5, 1 ... 4 as double!
  5 件のコメント
Paolo
Paolo 2018 年 7 月 1 日
Of course, my bad. Conversion from char to double is necessary. Please check my answer below. By the way, in the file you attached, data ranges from B4 to B11.
ugur uresin
ugur uresin 2018 年 7 月 1 日
編集済み: ugur uresin 2018 年 7 月 1 日
It always starts from B4 and ends to B"x"
x: Number of functions in my data and it's given in B2

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

採用された回答

Paolo
Paolo 2018 年 7 月 1 日
編集済み: Paolo 2018 年 7 月 1 日
[num, txt] = xlsread('mydata.xlsx', 'B4:B11');
mylist = cellfun(@(x) str2double(regexp(x,'(\d*\.?\d*)$','match')),txt);
  2 件のコメント
ugur uresin
ugur uresin 2018 年 7 月 1 日
It works! Thanks a lot Sir.
Paolo
Paolo 2018 年 7 月 1 日
You are welcome. You may also use:
[num, txt] = xlsread('mydata.xlsx', 'B4:B11');
[~,mylist] =strtok(txt,'=');
mylist =str2double(strtok(mylist,'='));

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

その他の回答 (1 件)

Jan
Jan 2018 年 7 月 1 日
編集済み: Jan 2018 年 7 月 1 日
Remember, that txt is a cell array. Then eitehr use
[dummy, str] = strtok(txt{k}, '=');
But strtok can operate on the complete cell also:
[~, mylist] = strtok(txt(4:uplim+4-1), '=');
mylist = strrep(mylist('= ', ''));
Note: i=i+1; is confusing but useless only inside a for i loop.
  2 件のコメント
ugur uresin
ugur uresin 2018 年 7 月 1 日
It gives an error
Index exceeds matrix dimensions.
Jan
Jan 2018 年 7 月 1 日
Then adjust the index: 4:uplim+4-1 to 1:uplim.

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

カテゴリ

Help Center および File ExchangeGet Started with MATLAB についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by