2014-09-05 44 views
0

我想將一些程序性的MATLAB代碼轉換爲OOP,但有點卡住了。下面是我的非OOP方法。我已經決定了的功能和文件,只是讓這個演示是自包含...將程序性MATLAB轉換爲OOP

AllFileName = {'file1Red.asc','file2Green.asc','file3Blue.asc'}'; 
noOfFiles = numel(AllFileName); 

for ii=1:1:noOfFiles 
    FileName = AllFileName{ii,1}; 
    fileNo(ii) = str2num(FileName(5)); 
    fileColor(ii,:) = {FileName(6:end-4)}; 
end 

所有這些程序確實是創造fileNo變量與[1;2;3]填充它,並與他們對應的顏色fileColor變量。

我想OOP版本首先加載的文件名,並基於這些文件對象的名稱,例如:

對象:file1Redfile2Greenfile3Blue

然後有它填充物與獲得的屬性通過我寫的外部功能。因此,在我的例子:

對象:file1Red

屬性::file1Red.no = 1,:file1Red.color = Red;

非常感謝幫助,謝謝。

編輯:更新了我的企圖

的想法是,我從一個儀器。ASC文件,我想批量加載每個.ASC文件轉換成一個類,並與信息比特填充類性質我選擇..

我創建了一個類文件與通用於每一個數據集的屬性:

classdef acfc < handle 
    properties 
     Temperature 
     Viscosity 
     RefractiveIndex 
     Wavelength 
     Angle    
    end 

    methods 
     function set.Temperature(this,v) 
      this.Temperature = v;    
     end  
    end  
end 

然後我用這個代碼選擇多個數據文件,其中他們的名字automatcial的LY被變成了一個類文件(這就是我想要的):

[AllFileName,PathName,FilterIndex] = uigetfile({'*.*';'*.txt';'*.asc'},'MultiSelect','on'); 

if iscellstr({AllFileName}) == 1 
    numOfFiles = 1; 
    AllFileName = {AllFileName}; 
else 
    numOfFiles = length(AllFileName); 
end 

for ii=1:1:numOfFiles  
    FileName = AllFileName{1,ii}; 
    [pathstr,name,ext] = fileparts(FileName); 
    assignin('base', name, feval('acfc')); 
end 

但是,這是我堅持,我有一個名爲我多麼希望他們的類,但在循環過程我想進入該文件並取出相關信息(波長,角度等)。我可以使用自定義函數來做到這一點,但我不知道如何將這些信息放入同名的類文件信息中。

謝謝

+0

你試過了什麼?你怎麼卡住了?或者這是一個僞裝的問題:請翻譯我的代碼? – Schorsch 2014-09-05 17:06:54

+0

@Schorsch我以爲我完全在錯誤的軌道上,所以沒有包括我的嘗試...更新。 – 2014-09-05 17:50:32

回答

0

更確切地說,你想擁有類的acfs對象。

是否確定對象已正確創建,以便您有類(workspaceObjectWithFilename)== acfc?我沒有在你的課堂上看到任何構造函數,但我手邊沒有Matlab來自己檢查。

如果你有一個構造函數,你可以嘗試assignin('base', name, feval('acfc(Temp,Visc,...)');

assignin和feval不應該應儘量避免使用非常漂亮的解決方案。

也許你可以試試dynamic properties,例如,將動態屬性放入類myFileObjects的對象中。

P = addprop(H,'PropertyName')