readtable() interpreting HEX as scientific

32 ビュー (過去 30 日間)
Michael Bernico
Michael Bernico 2020 年 3 月 11 日
コメント済み: Guillaume 2020 年 3 月 19 日
I have a script that is importing a csv file that contains decimal and hexadecimal values. Currently I am only utilizing the HEX values. The issue I have is occassionally the data has a value of something like 6E60 which matlab interprets as scientific and then errors on the hex2dec function. Is there a function that would suit better to avoid this issue or is there a format setting which I can apply prior to the readtable function to interpret the csv data as text?
Here are the relevant lines:
clear
clc
format short
warning('OFF', 'MATLAB:table:ModifiedVarnames')
[baseName, folder] = uigetfile({'*.csv';'*.xls';'*.xlsx';'*.txt'},'Select File for Table Data');
file = fullfile(folder, baseName);
The resulting variable is used to create a dataset from a search function
DataSet=csvData(r,:);
avgval=3.3*mean(hex2dec(DataSet.measurement))/65536;
avgval is the line that has issues.
  1 件のコメント
dpb
dpb 2020 年 3 月 11 日
"Here are the relevant lines:"
Excepting for the only one, truly relevant line is the one that was used to actually read the file...

サインインしてコメントする。

採用された回答

Guillaume
Guillaume 2020 年 3 月 11 日
In recent versions of matlab, the easiest would be to use detectImportOptions and override the relevant variable type to force it to char. However, R2015a predates detectImportOptions (introduced in R2016b). The only way for you to override the automatic type detection is to specify the 'Format' property in the readtable call. Unfortunately, that means you have to specify the format of all columns and know the exact number of columns rather than letting readtable work that out for you.
It would be something like:
data = readtable('yourfile', 'Format', '%f%f%s%s%f'); %for a file with 6 columns
where '%s' forces the corresponding column to be read as text regardless of its content.
  7 件のコメント
dpb
dpb 2020 年 3 月 11 日
"OP did fill the matlab version on the right -> (below the tags)."
Huh. Took me about a minute to find it even with the pointer... :) I never look outside the text of the Q? and/or Comments so whiffed on that entirely.
Guillaume
Guillaume 2020 年 3 月 19 日
"It's a glaring weakness imo that textscan, readtable cannot deal with hex input data (nor complex), only fscanf can handle hex; C doesn't know anything about complex."
Now that 2020a is out, you'll be pleased to know that this glaring weakness has finally been fixed.
textscan now has '%x' and '%b' format specifiers, readtable automatically recognises the 0x and 0b prefixes and there's various options for detectImportOptions to support direct conversion from hexadecimal or binary (with or without prefixes).
Hooray!

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeData Type Conversion についてさらに検索

製品


リリース

R2015a

Community Treasure Hunt

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

Start Hunting!

Translated by