2013-11-20 81 views
1

我的数据收集软件输出数据为.csv文件,第一行是每个输出的标题,后面是包含数据的行(我认为是非常标准的)。一个示例数据文件可以在这里找到:Example data fileMatlab - 如何做到这一点没有动态变量/评估?

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

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

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

所以,仅仅举一个例子,嵌套的结构将是这个样子:

File Structure

典型的文件路径看起来是这样的: H:\ RAWDATA \ 13年11月1日\ Cell1 \ ProximalDendrite_001 \ Sweep1.csv

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

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

这个想法是最终有一些东西,我可以从特定的扫描调用特定的数组。因此,使用上面的例子,我可以对“主”从Outputs001从小区1输出从Dendrite001使用拨打:

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

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

同样,使用eval函数也是可能的,但如果存在替代方案,我肯定会喜欢去那条路线。

回答

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的变量名的相当简单,否则你需要首先从每个标题字符串中翻译字符以删除任何无效字符。

+0

我看你如何在第一级之后做到这一点。但是,您是否可以考虑使用文件名称本身命名结构本身的方法。所以,例如,我在我的例子中的结构名称是11-01-13_Cell1 我的意思是,我可能只需要创建默认结构(例如DataSet1),它可以作为解决方法工作,但很明显isn不理想。 – user3014097