when I use contains function in a loop it show me that error message, even though Raw is a cell array, and also the compilation complete and the code after if contains(Raw(i,2),serie)==1 works well.
is there a solution for that ?

5 件のコメント

Matt J
Matt J 2019 年 4 月 22 日
編集済み: Matt J 2019 年 4 月 22 日
I suggest you provide code and input data that let's us reproduce the problem.
AMINE EL MOUATAMID
AMINE EL MOUATAMID 2019 年 4 月 22 日
RMS=cellstr(RMS);
BaseDir = 'C:\Temp'; % Set as you need
[FileName, FilePath] = uigetfile('*.xlsx', ...
'Please choose an Excel file', BaseDir);
File = fullfile(FilePath, FileName);
prompt='Quelle fenêtre ?';
numbofsheet=input(prompt);
[Num, Txt, Raw] = xlsread(File,numbofsheet);
sizeRaw=size(Raw);
for i=2 : sizeRaw(1,1)
if contains(Raw(i,2),serie)==1
for j=2 : rowRMS(1,1)
if contains(Raw(i,1),RMS(j,1))==1
if contains(Raw(i+1,8),MeasTypeID)==1
Raw(i+1,9)=RMS(j,2);
else
if contains(Raw(i+2,8),MeasTypeID)==1
Raw(i+2,9)=RMS(j,2);
else
if contains(Raw(i+3,8),MeasTypeID)==1
Raw(i+3,9)=RMS(j,2);
end
end
end
end
end
end
end
xlswrite(File,Raw,numbofsheet);
AMINE EL MOUATAMID
AMINE EL MOUATAMID 2019 年 4 月 22 日
ddaa.PNG
Matt J
Matt J 2019 年 4 月 22 日
編集済み: Matt J 2019 年 4 月 22 日
You need to provide the variables (in a .mat file) that would let us run the important section of the code as follows:
load yourMATFile.mat
sizeRaw=size(Raw);
for i=2 : sizeRaw(1,1)
if contains(Raw(i,2),serie)==1
for j=2 : rowRMS(1,1)
if contains(Raw(i,1),RMS(j,1))==1
if contains(Raw(i+1,8),MeasTypeID)==1
Raw(i+1,9)=RMS(j,2);
else
if contains(Raw(i+2,8),MeasTypeID)==1
Raw(i+2,9)=RMS(j,2);
else
if contains(Raw(i+3,8),MeasTypeID)==1
Raw(i+3,9)=RMS(j,2);
end
end
end
end
end
end
end
AMINE EL MOUATAMID
AMINE EL MOUATAMID 2019 年 4 月 22 日
these are the files

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

 採用された回答

Adam Danz
Adam Danz 2019 年 4 月 22 日
編集済み: Adam Danz 2019 年 4 月 22 日

0 投票

I can see in your screen shot of workspace variables that your "Raw" array contains mostly NaN values.
According to your error message, the first argument of contains() must be a string array, char vector, or cell array of char vectors. "Raw" appears to be a cell array with lots of NaNs.
You probably want to just skip iterations where the input to contains() includes NaN values (or you might want to use a different method).

5 件のコメント

AMINE EL MOUATAMID
AMINE EL MOUATAMID 2019 年 4 月 22 日
maybe I understand now
contains works for Raw(2,2); but doesn't work when it find NaN
Adam Danz
Adam Danz 2019 年 4 月 22 日
Yep! One way to avoid iterations with NaNs is something like this:
if all(~isnan(Raw(i,1))) & contains(Raw(i,1),RMS(j,1))==1
AMINE EL MOUATAMID
AMINE EL MOUATAMID 2019 年 4 月 22 日
ffddf.PNG
Adam Danz
Adam Danz 2019 年 4 月 22 日
編集済み: Adam Danz 2019 年 4 月 22 日
You need to do some exploring. Some trial and error. The error message tells you that the input to isnan() does not accept cell arrays. So try this
isnan(out{2,2})
% or
isnan([out{2,2}])
More more information on how to work with cell arrays:
AMINE EL MOUATAMID
AMINE EL MOUATAMID 2019 年 4 月 22 日
thank you

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

その他の回答 (0 件)

カテゴリ

製品

Community Treasure Hunt

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

Start Hunting!

Translated by