Filter löschen
Filter löschen

Matlab coder giving issue with 'textscan'

8 Ansichten (letzte 30 Tage)
Gopika Akhil
Gopika Akhil am 28 Dez. 2018
Kommentiert: Stephen23 am 1 Jan. 2019
I am trying Matlab Coder for the first time. I understood that it gives conversion of my Matlab code to C code.
My data input is from a .txt file and i used 'textscan' finction in my code which is giving issue in Matlab coder.
Can anybody suggest how can i fix this.
  3 Kommentare
Walter Roberson
Walter Roberson am 28 Dez. 2018
What is the message from MATLAB Coder?
Gopika Akhil
Gopika Akhil am 28 Dez. 2018
portion of the code giving error is
fid=fopen('101.txt');
s=textscan(fid,'%f'); -----> issue is "textscan is not supported for code generation"
fclose(fid);
x = s{1};
xsig =x(1:1:1000);
The text file used is also attached here . It is ECG signal.

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

Stephen23
Stephen23 am 28 Dez. 2018
Bearbeitet: Stephen23 am 1 Jan. 2019
Basically you will have to read the data as characters, and then convert to numeric. Probably the easiest way to do this is to use fread and then the method I outlined here:
Your case is simpler because you only have one single vector of data, which simplifies things quite a bit (I have not tested this with Coder, but I am sure that you can tweak it as required):
fid = fopen('101.txt');
str = fread(fid,[1,Inf],'char');
fclose(fid);
str = char(str);
idx = isstrprop(str,'wspace');
idy = diff([true,idx,true]);
idb = find(idy<0);
ide = find(idy>0)-1;
num = numel(idb);
tmp = cell(num,1);
for k = 1:num
tmp{k} = str(idb(k):ide(k));
end
vec = str2double(tmp);
Giving:
>> numel(vec)
ans = 1200
>> vec
vec =
-0.34500
-0.34500
-0.34500
-0.34500
-0.34500
-0.34500
-0.34500
-0.34500
... lots of lines here
-0.40500
-0.41500
-0.42500
-0.42000
-0.42000
-0.42000
-0.43000
-0.43000
-0.43000
EDIT (no cell array):
fid = fopen('101.txt');
str = fread(fid);
fclose(fid);
str = char(str(:).');
idx = isstrprop(str,'wspace');
idy = diff([true,idx,true]);
idb = find(idy<0);
ide = find(idy>0)-1;
num = numel(idb);
out = nan(num,1);
for k = 1:num
out(k) = str2double(str(idb(k):ide(k)));
end
  2 Kommentare
Walter Roberson
Walter Roberson am 31 Dez. 2018
coder prohibits t permission in fopen()
Stephen23
Stephen23 am 31 Dez. 2018
"coder prohibits t permission in fopen()"
It is not required anyway, so I got rid of that.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

Walter Roberson
Walter Roberson am 28 Dez. 2018
MATLAB Coder does not support textscan(). It also does not support fgetl() or fgets() or fgetc() or fscanf() or sscanf() . It does support fread(), including reading one character at a time, so you could in theory write an equivalent to fscanf() .
... But in practice you would not do that. Instead, in practice what you would do is use coder.ceval() to call C standard I/O routines to analyze and convert lines.
  11 Kommentare
Gopika Akhil
Gopika Akhil am 1 Jan. 2019
Can you suggest
1)what i have to use insted of 'inf' in your code, because coder will not take 'inf'
2)how will i convert each substring to numeric separately.because i am again getting inf when i tried it before making the cell.
Stephen23
Stephen23 am 1 Jan. 2019
"what i have to use insted of 'inf' in your code, because coder will not take 'inf'"
See the "EDIT" code in my answer, which does not use Inf.
"how will i convert each substring to numeric separately.because i am again getting inf when i tried it before making the cell."
See the "EDIT" code in my answer, which does not use a cell array.

Melden Sie sich an, um zu kommentieren.

Kategorien

Mehr zu Characters and Strings finden Sie in Help Center und File Exchange

Produkte


Version

R2016a

Community Treasure Hunt

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

Start Hunting!

Translated by