I'm trying to create a subset of file names from a dir listing when many of the files have similar naming structures. for example I use the code:
dirname=pwd;
dirData=dir(dirname);
dirIndex=[dirData.isdir];
fileList={dirData(~dirIndex).name};
and I get a complete listing of the files.
Unfortunately, my files are named:
"Template_001.asc"
"Template_001_spent_fuel_tank1.asc"
"Template_001_spent_fuel_tank2.asc"
"Template_001_payload.asc"
"Template_002.asc" and so on through "Template_999_payload.asc"
What I need to do is create a matrix/array of just the files that have the base name of
"Template_001.asc"
"Template_002.asc"
"Template_003.asc"
...
"Template_999.asc"
from the populated fileList variable.
Any help would be greatly appreciated.

댓글 수: 3

per isakson
per isakson 2014년 2월 7일
편집: per isakson 2014년 2월 7일
I have problems to exactly understand what "base name" means.
Woody
Woody 2014년 2월 7일
편집: Woody 2014년 2월 7일
It's the subset of all of the files in the fileList variable that only contain "Template_001.asc" "Template_002.asc" "Template_003.asc" all the way to "Template_999.asc". How would I build a subset of just those files from the full listing of the files in fileList?
For example if fileList has: "Template_001.asc" "Template_001_spent_fuel_tank1.asc" "Template_001_spent_fuel_tank2.asc" "Template_001_payload.asc" "Template_002.asc" "Template_002_spent_fuel_tank1.asc" "Template_002_spent_fuel_tank2.asc" "Template_002_payload.asc" "Template_003.asc"
How would I build a list that only contains "Template_001.asc", "Template_002.asc" and "Template_003.asc"?
dpb
dpb 2014년 2월 7일
편집: dpb 2014년 2월 7일
But if they're in the list you're returning from the previous dir() call, then with the proper wildcard matching they'll be the ONLY ones returned thus eliminating the need to do the selection after the fact.
Solve the problem by avoiding the problem in the first place.
Of course, if you're adamant of going at it the hard way, you can do pattern-matching on the content of the array similarly, but why make it more complex than needs be?

댓글을 달려면 로그인하십시오.

 채택된 답변

Azzi Abdelmalek
Azzi Abdelmalek 2014년 2월 7일
편집: Azzi Abdelmalek 2014년 2월 7일

0 개 추천

A={'Template_001.asc'
'Template_001_spent_fuel_tank1.asc'
'Template_001_spent_fuel_tank2.asc'
'Template_001_payload.asc'
'Template_002.asc'}
out=A(~cellfun(@isempty,regexp(A,'.+(?<=_\d{3}\.asc)','match')))

댓글 수: 3

Woody
Woody 2014년 2월 7일
Excellent! That regexp was where I was having trouble.
dpb
dpb 2014년 2월 7일
But still, why not just select the ones desired to begin with????
Azzi Abdelmalek
Azzi Abdelmalek 2014년 2월 7일
편집: Azzi Abdelmalek 2014년 2월 7일
Are you sure ??? works ?

댓글을 달려면 로그인하십시오.

추가 답변 (1개)

dpb
dpb 2014년 2월 7일

0 개 추천

Far simpler would be to simply return the ones you want...
d=dir([dirname\template_???.asc");
for i=1:length(d)
%process file d.name(i) here
...
Build an appropriate filter for whichever subset you want.

카테고리

도움말 센터File Exchange에서 File Operations에 대해 자세히 알아보기

질문:

2014년 2월 7일

편집:

2014년 2월 7일

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by