Как перейти от файла к файлу в цикле, MatLab? - PullRequest
0 голосов
/ 22 октября 2011

Есть ли способ просто загрузить имя первого файла в каталоге без указания его имени, а затем на каждой итерации переходить к следующему файлу в каталоге?

У меня проблема симена файлов имеют имена 1, 1,5, 2,2,5,3, 3,5 и т. д., поэтому num2str (X) в итерации не поможет найти файл.

Я пытаюсь переименовать ихиспользуя strrep (s1, s2, s3), но все же я снова сталкиваюсь с той же проблемой загрузки их в цикл!

Я понимаю, что сначала я должен был назвать их с большим планированием, но эти файлыслишком велик, чтобы снова запустить симуляции.

Вот что мне нужно переименовать файлы:

%%%RENAMING A FILE%%%

%Search directory to get number of files
 d1=dir('\MATLAB\Data\NumberedQwQoRuns');
 numfiles = length(d1)-2;


for a=1:numfiles
%Search subdirectory if necessary for count of those folders
d2=dir('\MATLAB\Data\NumberedQwQoRuns\Run'num2str(a));
subdir = length(d2)-2;
for b= 1:subdir

origname= PROBLEM???

Newname=['Zdata' num2str(b) '.txt']
Newfile= strrep(origname, origname, newname)
movefile(origname,Newfile)

end
end

Большое спасибо за вашу помощь, Абид A

Ответы [ 2 ]

2 голосов
/ 22 октября 2011

Вот мое решение:

%# get runs subdirectories
BASE_DIR = '/path/to/Runs';
runsDir = dir( fullfile(BASE_DIR,'Runs') );
runsDir = {runsDir([runsDir.isdir]).name};           %# keep only directory names
runsDir = runsDir( ~ismember(runsDir, {'.' '..'}) ); %# ignore "." and ".."

for r=1:numel(runsDir)
    %# get files in subdirectory
    runFiles = dir(fullfile(BASE_DIR,'Runs',runsDir{r},'*.txt')); %# *.txt files
    runFiles = {runFiles.name};                                   %# file names

    %# map filenames: 1,1.5,2,2.5,... into 1,2,3,4,...
    [~,ord] = sort(str2double( regexprep(runFiles,'\.txt$','') ));
    newrunFiles = cellstr( num2str(ord(:),'Zdata_%d.txt') );
    newrunFiles = strtrim(newrunFiles);

    %# rename files
    for f=1:numel(runFiles)
        fname = fullfile(BASE_DIR,'Runs',runsDir{r},runFiles{f});
        fnameNew = fullfile(BASE_DIR,'Runs',runsDir{r},newrunFiles{f});
        movefile(fname,fnameNew);
    end
end

Я проверил его на следующей файловой структуре:

Runs/
|
|__Run1/
|  |__1.txt        will become: Zdata_1.txt
|  |__1.5.txt                   Zdata_2.txt
|  |__2.txt                     Zdata_3.txt
|  |__2.5.txt                   etc...
|  |__3.txt
|  |__3.5.txt
|
|__Run2/
   |__1.txt
   |__1.5.txt
   |__2.txt
   |__2.5.txt
   |__3.txt
   |__3.5.txt
0 голосов
/ 22 октября 2011

Получить фактическое имя файла из subdir(b).name

Обратите внимание, что могут возникнуть проблемы, если ваше синтезированное имя совпадает с одним из существующих имен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...