我正在编写GUI,我在其中加载包含测量数据的.csv
个文件。该文件定义明确:
<variable>(<unit>),<variable>(<unit>),...
0.005,NaN,...
我正在Vars
,Units
和Data
处理它:
A=importdata('foo.csv',',');
Data=A.data;
[Vars,Units]=ProcessHeaderLine(A.colheaders);
当数据部分损坏时出现问题 - 单元格中有字符串而不是数字:
<variable>(<unit>),<variable>(<unit>),...
0.005,"- N/A - ",...
在这种情况下,运行importdata
函数需要很长时间并抛出错误:
Error using importdata (line 136)
Unable to open file.
Error in <.m file> (line 384)
A=importdata('foo.csv'],',');
这种方法是否比try-catch
更快,能够处理标题和数据并且能够处理数据包含字符串&#34;单元格&#34;?
答案 0 :(得分:1)
即使这是一个MATLAB问题,Perl也是预处理文件的最佳方式(Perl包含在MATLAB发行版中!)。以下命令行脚本将"- N/A -"
替换为999999
。选择您喜欢的任何替换值,并在运行importdata()
后在MATLAB中处理它。
perl -pi -e 's/\"- N\/A -\"/999999/g' filename.csv
注意:这会就地更改文件!在尝试此操作之前,请务必制作文件的备份副本。
注意2:如果您确实需要,可以使用MATLAB system()
调用从GUI运行此预处理步骤。
答案 1 :(得分:1)
虽然它更适合垂直布局而非水平放置的数据,但您可以使用可读函数。
% Use readtable to read the data as a table:
% The first row is the column names, the second row is the data
t = readtable('foo.csv', 'ReadVariableNames', false);
% Use {} brackets to extract from the table
colheaders = t{1,:};
Data = str2double(t{2,:});
在这种情况下,str2double将采用任何无效文本,例如“ - N / A - ”,并将其转换为NaN。