Test the variable type from file input

4 次查看(过去 30 天)
I recall a way in Verilog to test a char read in from a file (like a buffer, I believe) and then based on what that char is, proceed in a certain way.
My current file reading uses fscanf and reads in only numbers, but the users here sometimes user True/False for a line, and sometimes 0/1. An example of a line could be either:
Fruit Bananas True Potatoes False
~~ or ~~
Fruit Bananas 1 Potatoes 0
I'm trying to migrate toward 0/1, since I don't think Matlab recognizes True/False like python can. So I want to be able to read in either file type. If the scan returns a number (after the fruit type), then I proceed with numbers, if it returns a char or string, then I proceed for that. Does anyone have suggestions? Thanks!
&nbsp
EDIT: My actual input file looks more like this: (a mixture)
VAR1 55.6
VAR2 23
VAR3 0
VAR4
VAR5
VAR6 -999
VAR7 True
VAR8 False
VAR9 0
VAR10 1

采纳的回答

per isakson
per isakson 2014-8-21
编辑:per isakson 2014-8-21
Another approach
fid = fopen('bananas.txt','r');
cac = textscan( fid, '%s%s%s%s%s' );
fclose( fid )
isb = cellfun( @(str) logical( eval( lower( str ) ) ), cac{3} );
where bananas.txt contains the two lines
Fruit Bananas True Potatoes False
Fruit Bananas 1 Potatoes 0
Inspect isb
>> whos isb
Name Size Bytes Class Attributes
isb 2x1 2 logical
  5 个评论
per isakson
per isakson 2014-8-22
编辑:per isakson 2014-8-22
My "smart" on-liner doesn't work and cannot be fixed to work with empty and numerical values.
Lessons learned:
  • Don't use specialized on-liners.
  • Backward engineering of a simple example often results in erroneous requirements and consequently an answer, which doesn't apply to the real problem
Proposal: post a new question.
per isakson
per isakson 2014-8-22
编辑:per isakson 2014-8-22
  • "I'm trying to migrate toward 0/1" &nbsp Why not stick with True/False? That makes the file more readable in the editor. What if '1' means numerical 1 for some other variable, e.g. VAR1
  • "I don't think Matlab recognizes True/False like python" &nbsp I don't know Python well enough to understand the meaning of this statement.

请先登录,再进行评论。

更多回答(1 个)

the cyclist
the cyclist 2014-8-21
编辑:the cyclist 2014-8-21
There are ischar() and isnumeric() functions in MATLAB, to identify particular variable types, as well as the class() function.
Also, MATLAB will recognize true and false as logical values.
  2 个评论
katerina
katerina 2014-8-21
so if I read in "true" from a file, is there a value type I can use so that it will convert to 1 or 0?
katerina
katerina 2014-8-21
I realize I could just read in the string and convert it if needed, but I'd like a clean way to discriminate between reading a number or "True"/"False".

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 Logical 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by