對于我的程式輸入是一個帶有一些變數名稱及其值的 csv 檔案。
| var name | value |
| -------- | -------------- |
| a.b | 345 |
| a.c._0_.field1 | 322 |
| a.c._0_.field2 | 5 |
| a.c._1_.field1 | 32 |
| a.c._1_.field2 | 50 |
在我的代碼中,我想讀取此檔案并使用檔案中提到的值創建結構變數,并具有以下約束。
- 沒有一個變數的名稱是已知的。因此應該動態創建它們
- 所有子結構由
. - 在陣列的情況下,用 . 提到不同的索引
_%d%_。
在上述情況下,結構 a 將包含資料:
a.b = 345
a.c(1).field1 = 322
a.c(1).field2 = 5
a.c(2).field1 = 32
a.c(2).field2 = 50
如何創建命名結構a并保存到 mat 檔案?但是我可以使用它eval,因為不推薦使用它,我想知道是否可以使用setfield getfield
uj5u.com熱心網友回復:
我在這里假設您已經將檔案讀入 MATLAB;您可以使用strsplit()在點上拆分變數名稱,檢查條目是否對應于數字或欄位名稱,并使用它們創建結構。您可以將 asubstruct()與subsref()or結合使用subsasgn()來進行索引:
data = struct; % Initialise your final structure
% Insert a loop here over all your rows
parts = strsplit(my_str, '.'); % split your string
indx = struct;
for ii = 1:numel(parts)
if parts{ii}(1) ~= '_' || parts{ii}(end) ~= '_'
indx(ii).type = '.';
indx(ii).subs = parts{ii};
else
indx(ii).type = '()';
indx(ii).subs = {str2double(parts{ii}(2:end-1))};
end
end
data = subsasgn(data, indx, my_data);
我確實認為這是一個XY 問題。可能有一種更好的方法可以從用于創建 CSV 的任何內容中匯出資料,還有一種更好的方法可以將其加載到 MATLAB 中以供以后使用。請首先說明您是如何創建 CSV 的,以及您想對 MATLAB(或您的 .mat 檔案)中的資料做什么。僅僅為了刺激而將 CSV 檔案重新打包為 .mat 檔案幾乎不是您的目標。因此,請詢問您的問題 (X),而不是您嘗試的解決方案 (Y),以獲得更多有用的回復。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/481588.html
