Matlab coder giving issue with 'textscan'
Ältere Kommentare anzeigen
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
madhan ravi
am 28 Dez. 2018
upload your code
Walter Roberson
am 28 Dez. 2018
What is the message from MATLAB Coder?
Gopika Akhil
am 28 Dez. 2018
Akzeptierte Antwort
Weitere Antworten (1)
Walter Roberson
am 28 Dez. 2018
0 Stimmen
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
am 31 Dez. 2018
Walter Roberson
am 31 Dez. 2018
You would
fread(fid, 1, 'char')
to read one character at a time, and do the testing for CR and NL yourself in order to build up lines that you could interpret with str2double() .
fread() is to read binary, and will not do conversion from text to numeric for you. Normally you would fgetl() or fgets() to read a line to work with, but those are not supported by MATLAB Coder, so you would need to fread() single characters to find the boundaries.
Stephen23
am 31 Dez. 2018
Gopika Akhil's "Answer" moved here:
Yes i tried that way, but str2double is not returning the proper value.
for example, the first value in my text file is -0.345000000000000 but
fread(fid, 1, 'char') will give the value as 45.
Doing str2double for this gives NaN.
Stephen23
am 31 Dez. 2018
@Gopika Akhil: fread reads characters, and the first character in your file is a minus sign (which has character value 45). But I doubt that you want the character values of each individual character.
To convert all those characters in the file into numeric you can identify the boundaries of any number substrings, split them into those substrings, and then apply str2double to those substrings (exactly as I showed in the link I gave in my answer), or use coder.ceval as Walter Roberson suggested.
Gopika Akhil
am 31 Dez. 2018
Walter Roberson
am 31 Dez. 2018
you cannot coder.ceval of textscan unless you write your own textscan . textscan is not a C or C++ library function . you would invoke fscanf
Stephen23
am 31 Dez. 2018
"I tried the steps suggested in the link you have given. Even after seperation by isstrprop and creating separate arrays and then trying str2double is giving me NaN as answer."
It worked for me. See my answer.
Gopika Akhil
am 1 Jan. 2019
@Gopika Akhil: if cell arrays do not work with str2double when using Coder then you can convert each substring to numeric separately:
If you have the start and end indices of each number substring then these are trivial to loop over. See my edited answer.
Gopika Akhil
am 1 Jan. 2019
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.
Kategorien
Mehr zu Data Type Conversion finden Sie in Hilfe-Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!