error message 'char'.how to solve?
Show older comments
function [EPClist,data]=extraction_data(Nomfichier)
dummy=importfile(Nomfichier);
j=1;
for i=1:height(dummy)
if dummy.OperationResult(i)==' Read OK'
data_raw(j,1)=dummy.Date(i);
data_raw(j,2)=dummy.EPC(i);
data_raw(j,3)=dummy.ReadData(i);
j=j+1;
end
end
clear dummy
EPClist=unique(data_raw(:,2));
Nb_capteur=length(EPClist);
data=cell(1,Nb_capteur);
for i=1:Nb_capteur
k=1;
for j=1:length(data_raw)
if data_raw(j,2)==EPClist(i)
%data{i}(k,1)=data_raw(j,1);
%data{i}(k,1)=0;
data{i}(k,1)=hex2dec(data_raw{j,3}(5:8));
temphexa=data_raw{j,3}(9:12);
if temphexa(1)=='F'
data{i}(k,2)=1/100*(hex2dec(temphexa)-hex2dec('FFFF')+1);
else
data{i}(k,2)=1/100*hex2dec(temphexa);
end
k=k+1;
end
end
EPClist{i}=EPClist{i}(end-3:end);
end
Error message:
Undefined function 'importfile' for input arguments of type 'char'.
Error in extraction_data (line 3)
dummy=importfile(Nomfichier);
Error in detect_palier (line 3)
[EPC,B]=extraction_data(titre);
Error in extract_palier (line 23)
[EPC,pression,temperature]=detect_palier(titre,table_delete);
1 Comment
Luca Ferro
on 19 Apr 2023
importfile is not a matlab built-in function, could you share its code or where you have taken it from?
Answers (1)
Walter Roberson
on 19 Apr 2023
0 votes
The function importdata has an option to generate a function that will import other files using the same configuration. It is common for the generated function to be called importfile . But it is not part of MATLAB; it is the result of someone using importdata() and asking to save the associated code.
These days, looking at the imported data, you should probably instead use readtable
6 Comments
md sazzad
on 24 Apr 2023
Walter Roberson
on 24 Apr 2023
Your existing for i=1:height(dummy) loop would be fine if you were to use readtable, with the exception that you should change the test to
if dummy.OperationResult(i)==" Read OK"
Walter Roberson
on 24 Apr 2023
Rewriting to use readtable:
function [EPClist,data]=extraction_data(Nomfichier)
dummy = readtable(Nomfichier);
j=1;
for i=1:height(dummy)
if strtrim(dummy.OperationResult(i)) == "Read OK"
data_raw(j,1)=dummy.Date(i);
data_raw(j,2)=dummy.EPC(i);
data_raw(j,3)=dummy.ReadData(i);
j=j+1;
end
end
clear dummy
EPClist=unique(data_raw(:,2));
Nb_capteur=length(EPClist);
data=cell(1,Nb_capteur);
for i=1:Nb_capteur
k=1;
for j=1:length(data_raw)
if data_raw(j,2)==EPClist(i)
%data{i}(k,1)=data_raw(j,1);
%data{i}(k,1)=0;
data{i}(k,1)=hex2dec(data_raw{j,3}(5:8));
temphexa=data_raw{j,3}(9:12);
if temphexa(1)=='F'
data{i}(k,2)=1/100*(hex2dec(temphexa)-hex2dec('FFFF')+1);
else
data{i}(k,2)=1/100*hex2dec(temphexa);
end
k=k+1;
end
end
EPClist{i}=EPClist{i}(end-3:end);
end
This has three differences compared to your original:
- changed importfile() to readtable()
- changed ' Read OK' to "Read OK"
- added strtrim()
I wanted to account for the possibility that when you used readtable() that possibly the leading space in ' Read OK' might not be present. Either way, whether it is or is not present, this code should work.
There is one potential problem, though: with readtable() the Date might be read as a datetime object rather than as numeric; if so then you would not be able to mix it in with numeric objects. But possibly it will come across as a char vector or as a cell array of char vectors or as a string... it would be easier if we had an extract of a file to test with.
md sazzad
on 25 Apr 2023
md sazzad
on 25 Apr 2023
Walter Roberson
on 25 Apr 2023
You have to pass in a file name.
Categories
Find more on Calendar in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!