Matlab coder giving issue with 'textscan'
8 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
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
Akzeptierte Antwort
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
Stephen23
am 31 Dez. 2018
"coder prohibits t permission in fopen()"
It is not required anyway, so I got rid of that.
Weitere Antworten (1)
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
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.
Siehe auch
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!