Matlab - 如何在没有动态变量/ eval的情况下执行此操作?

时间:2013-11-20 17:31:23

标签: matlab csv dynamic matrix eval

我的数据收集软件将数据输出为.csv文件,第一行是每个输出的标题,后面是包含数据的行(我认为非常标准)。可在此处找到示例数据文件:Example data file

这是我遇到问题的第一点。基本上当我导入文件时,我得到2个矩阵,一个包含标题(所以只是一个[1xN]矩阵,其中N是输出的数量。实验之间的N变化,这是问题的一部分),另一个包含所有数字数据点。由此,我需要创建使用“headers”矩阵中的每个头命名的数组。我需要实际将它们从矩阵中拉出来,而不是只有一组与“data”矩阵中的每一列相对应的标准名称,因为输出的数量和输出的名称可能是可以(并且经常)在文件之间进行更改。

我知道这可以使用eval函数完成,但我也知道应尽可能避免使用eval函数。我只是在另一种方式去做这件事。

下一级的复杂性,我认为解决方案(如果有的话)将类似于上面的解决方案,是我需要以嵌套结构的形式维护文件夹结构。这是因为我需要能够一次导入大量这些文件。

所以,举一个例子,嵌套结构看起来像这样:

File Structure

典型的文件路径如下所示: H:\ RAWDATA \ 13年11月1日\小区1 \ ProximalDendrite_001 \ Sweep1.csv

等,其中Sweep1对应于我所链接的一个VoltageOutputs文件(每个文件夹通常有多个扫描)。

然后,我们的想法是为每个包含各种OutputVariable数组的扫描生成一个矩阵。每个数据文件夹有多个扫描,每个数据文件夹都包含在该数据集的较大文件夹中。我需要能够根据它们对应的文件名来命名包含所有这些矩阵的矩阵。

我的想法是最终有一些东西,我可以从特定的扫描调用特定的数组。因此,使用上面的示例,我可以使用以下命令从Cell1调用Dendrite001的Outputs001中的“Primary”输出:

11-01-13_Cell1.ProximalDenrite_001.Sweep1.Primary

所以,再一次,需要能够通过首先查看它们的命名方式(这很容易获得)来命名这些东西,保存该字符串,并以某种方式用相应的名称重命名矩阵。

再次,可以使用eval函数,但如果存在替代方案,我当然希望走这条路线。

1 个答案:

答案 0 :(得分:1)

我做了类似的事情,我创建了一个结构,其中每个字段名称来自文件中的标题信息。我的相当精细,我现在无法访问该代码,但基本上是这样的:

% use the header field as the name and assign all rows to that vector
for nidx = 1:length(headers)
   structname.(headers{nidx}) = data(:,nidx);
end

只要您的标题字段名称有效,Matlab变量名称就相当简单,否则您需要翻译字符以从每个标题字符串中删除任何无效字符。