2012-12-18 16 views
0

我有一個需要讀入matlab的文本文件。我想在Matlab中使用結構實現類似java的LinkedHashMap。我的文本文件是這樣如何從單元格構造字段名稱

3-1 33.33 37.58

3-1 66.67 20.47

3-2 33.33 41.64

3-2 66.67 24.42

我看了整個文件到數組[a,x,y]其中a是一個包含3-1的單元陣列3-2

我需要結構的字段名稱爲(1)或(2),但是u不幸的matlab給了我錯誤。原因是我需要檢查例如(1)是否已經是一個結構字段名稱,我將這些值連接到先前的值;如果沒有,請使用尊重值創建新的字段名稱。代碼:

[a,x,y]=textread('mytxt.txt', '%q%f%f','commentstyle','matlab'); 

s.a(1)=[x(1),y(1)]; 

for j=2:length(a) 

    if isfield(s,a(1))==0 

     s.a(j)=[x(j),y(j)]; 

    else 

     temp = s.a(j); 

     C = concat(1,temp,[x(j),y(j)]; 

     s.a(j) = C 

    end 

end 
+0

我對究竟什麼是你正在試圖解決這個問題感到困惑。你的錯誤是什麼?你說什麼? – jerad

回答

2

想必你想擁有小號的結構域3-1,3-2,...,3-N。我也認爲你想創建使用MATLAB的dynamic field names

動態訪問領域通過單元的單元陣列一個你需要做類似的東西:

s.(a{j}) = [x(j), y(j)]; 

記括號()和括號的不同用途{}。圓括號用於指示動態字段名稱,如s。(str)其中str是一個字符數組。大括號用於索引到單元陣列a中,如a {j}給出第012個小區的字符數組a

最後,您提出的字段名稱(3-1,3-2,...等)由於連字符' - '而不是合法的MATLAB字段名,並且它們不以字母開頭, [a-zA-Z]。因此,您需要用另一個字符替換連字符,例如下劃線,並在提議的字段名稱的開頭附加一個字母。

  1. 使用strrep

    一個= strrep更換連字符(A, ' - ', '_');

  2. 附加字母到字段名稱

    一個= cellfun的開始(@(STR)[ 'A_' STR]中,a, 'uniformoutput',0)

這項工作可以做你讀完該文件到矩陣之後立即Xÿ

相關問題