我想将一些程序性MATLAB代码转换为OOP,但有点卡住了。我的非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版本首先加载文件名,然后根据这些文件名创建对象,例如:
对象:file1Red
,file2Green
,file3Blue
,
然后让它用我写的外部函数获得的属性填充对象。所以在我的例子中:
对象: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
然后我使用此代码选择几个数据文件,其名称会自动转换为类文件(这就是我想要的):
[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 :(得分:0)
更确切地说,你想拥有类acfs的对象。
您确定对象是否已正确创建,以便您拥有类(workspaceObjectWithFilename)== acfc?我没有在你的班级看到任何构造函数,但是我没有Matlab可以自己检查。
如果您有构造函数,可以尝试assignin('base', name, feval('acfc(Temp,Visc,...)');
也许您可以尝试dynamic properties,例如将动态属性放入类myFileObjects的对象中。
P = addprop(H,'PropertyName')