2013-11-20 84 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