我的数据收集软件将数据输出为.csv文件,第一行是每个输出的标题,后面是包含数据的行(我认为非常标准)。可在此处找到示例数据文件:Example data file
这是我遇到问题的第一点。基本上当我导入文件时,我得到2个矩阵,一个包含标题(所以只是一个[1xN]矩阵,其中N是输出的数量。实验之间的N变化,这是问题的一部分),另一个包含所有数字数据点。由此,我需要创建使用“headers”矩阵中的每个头命名的数组。我需要实际将它们从矩阵中拉出来,而不是只有一组与“data”矩阵中的每一列相对应的标准名称,因为输出的数量和输出的名称可能是可以(并且经常)在文件之间进行更改。
我知道这可以使用eval函数完成,但我也知道应尽可能避免使用eval函数。我只是在另一种方式去做这件事。
下一级的复杂性,我认为解决方案(如果有的话)将类似于上面的解决方案,是我需要以嵌套结构的形式维护文件夹结构。这是因为我需要能够一次导入大量这些文件。
所以,举一个例子,嵌套结构看起来像这样:
典型的文件路径如下所示: 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函数,但如果存在替代方案,我当然希望走这条路线。
答案 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变量名称就相当简单,否则您需要翻译字符以从每个标题字符串中删除任何无效字符。