Test the variable type from file input

1 回表示 (過去 30 日間)
katerina
katerina 2014 年 8 月 21 日
編集済み: per isakson 2014 年 8 月 22 日
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 Center および File ExchangeLogical についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by