Separating values in cell arrays

2 vues (au cours des 30 derniers jours)
ugur uresin
ugur uresin le 1 Juil 2018
Commenté : Jan le 1 Juil 2018
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 commentaires
Paolo
Paolo le 1 Juil 2018
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 le 1 Juil 2018
Modifié(e) : ugur uresin le 1 Juil 2018
It always starts from B4 and ends to B"x"
x: Number of functions in my data and it's given in B2

Connectez-vous pour commenter.

Réponse acceptée

Paolo
Paolo le 1 Juil 2018
Modifié(e) : Paolo le 1 Juil 2018
[num, txt] = xlsread('mydata.xlsx', 'B4:B11');
mylist = cellfun(@(x) str2double(regexp(x,'(\d*\.?\d*)$','match')),txt);
  2 commentaires
ugur uresin
ugur uresin le 1 Juil 2018
It works! Thanks a lot Sir.
Paolo
Paolo le 1 Juil 2018
You are welcome. You may also use:
[num, txt] = xlsread('mydata.xlsx', 'B4:B11');
[~,mylist] =strtok(txt,'=');
mylist =str2double(strtok(mylist,'='));

Connectez-vous pour commenter.

Plus de réponses (1)

Jan
Jan le 1 Juil 2018
Modifié(e) : Jan le 1 Juil 2018
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 commentaires
ugur uresin
ugur uresin le 1 Juil 2018
It gives an error
Index exceeds matrix dimensions.
Jan
Jan le 1 Juil 2018
Then adjust the index: 4:uplim+4-1 to 1:uplim.

Connectez-vous pour commenter.

Catégories

En savoir plus sur Resizing and Reshaping Matrices dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by