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 件)

カテゴリ

ヘルプ センター および File ExchangeMatrix Indexing についてさらに検索

製品

Community Treasure Hunt

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

Start Hunting!

Translated by