당신은 동적 필드 이름 (바스의 제안을)를 사용하고, 피할 수 eval
:
예를 들어
, 당신은 단지 일부 사용자 지정 분석 기능으로 파일 'somefile.ext'
에서 구조 dat
를로드 한 경우 :
filename = 'somefile.ext'; % presume you actually have a list of files from dir or ls
dat = yourfunction(filename);
[~, name, ~] = fileparts(filename);
alldat.(name)=dat;
이것은 다음과 같습니다 :
alldat.somefile = dat;
f ilename (이 경우 경로/확장자를 제거하면되지만 파일 이름의 패턴에 따라 다른 작업을 수행 할 수 있습니다).
names = fieldnames(alldat)
for n = 1:length(names)
alldat.(names{n}).mean = mean(alldata.(names{n}).size);
end
모든 하위 구조 :
이의 보너스는 서브 필드가 모두 필드 alldat.file1, alldata.file2, alldat.file3
, 말, size
이 같은 일을 할이있는 구조로, 그건 당신이 말하고 할 수있다 이제 데이터의 평균을 포함하는 mean
필드가 있습니다. 이름이 다른 여러 구조가있는 경우 eval
까지 모두에게 필요한 모든 것을 필요로하며 코드를 읽고 유지하기가 어려워집니다.
다른 옵션은 셀 배열입니다. 여기에 쉬운 트릭는 다음과 같습니다
는
dat = % whatever you do to make this structure
alldat{end+1} = dat;
이것은 단지 기존의 셀 어레이의 마지막에 새로운 dat
을 추가합니다. {end+1}
은 기존 데이터를 덮어 쓰지 않도록합니다.
실제 작업이 무엇인지 알려주시겠습니까? 이와 같은 변수의 이름을 바꾸는 좋은 이유는 거의 없으며,'eval'을 많이 사용하고 있다면 미래에 더 많은 일을 할 가능성이 높습니다. – nkjt
@nkjt 필자는 netcdf 파일을로드 할 때 필요한 데이터를 골라서 dat이라고하는 구조의 여러 배열에 집어 넣습니다.그런 다음 다음 번에 많은 데이터를로드 할 때 덮어 쓰기를 방지하기 위해 구조의 이름을 바꾸고 싶습니다. –