2014-09-05 45 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')