Matlab coder giving issue with 'textscan'
이전 댓글 표시
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
madhan ravi
2018년 12월 28일
upload your code
Walter Roberson
2018년 12월 28일
What is the message from MATLAB Coder?
Gopika Akhil
2018년 12월 28일
채택된 답변
추가 답변 (1개)
Walter Roberson
2018년 12월 28일
0 개 추천
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
Gopika Akhil
2018년 12월 31일
Walter Roberson
2018년 12월 31일
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
2018년 12월 31일
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
2018년 12월 31일
@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
2018년 12월 31일
Walter Roberson
2018년 12월 31일
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
2018년 12월 31일
"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
2019년 1월 1일
@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
2019년 1월 1일
Stephen23
2019년 1월 1일
"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.
카테고리
도움말 센터 및 File Exchange에서 Data Type Conversion에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!