【发布时间】:2016-09-15 02:22:54
【问题描述】:
我正在编写 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这种方法更快的方法,能够同时处理标题和数据,并能够处理包含字符串“单元格”的数据?
【问题讨论】:
-
MATLAB 非常适合处理纯数字数据文件。字符串数据不是很好,而且没有一个 MATLAB 阅读器可以很好地处理可以将类型从一条记录更改为另一条记录的数据。您的示例特别令人不安,因为它显示了不平衡的引号!如果您的“字符串”数据几乎总是相同的,并且它是真实数据不可用的标记,那么最好的解决方案是预处理数据文件。将字符串(在本例中为
" N/A)替换为对您的应用程序无效的数值(可能是-1?可能是999999?)。 -
@gariepy 字符串实际上是
"- N/A - ",我可以识别问题并且可以半自动修复它。但我是这里(实验室里)唯一一个疯狂到能够追踪并面对它的人。结果本来就是万无一失的密封黑匣子…… -
其中一个测试文件 - 有问题的文件 - 包含整列中的字符串。问题是我不知道 为什么 有
N/A标志。关于函数设计我不知道在第二行寻找字符串是否足以决定如何处理文件。 -
因此,如果您知道在某些条件下可以获取字符串
"- N/A - ",那么预处理数据文件以将其删除会增加系统的稳健性,尤其是在您无法修复所有它发生的情况。在运行多步模拟时,我不得不多次这样做,其中一个 sim 的输出与另一个 sim 所需的输入不完全匹配。添加预处理步骤非常简单,如果需要,您可以继续工作,并在以后修复N/A问题。