Цикл по массиву строк в Matlab - PullRequest
0 голосов
/ 17 апреля 2019

Я пытаюсь просто перебрать некоторые папки, используя список строк в Matlab, и все, что я пробовал, не сработало.

Например, если бы у меня было три имени, все, что я хотел бы, - это циклически просматривать некоторые папки, подобные этой:

names = ['Tom', 'Dick', 'Harry']

SourceDir = /path/to/my/files

for name = 1:length(names)

    mkdir SourceDir, "/things_belonging_to_", names(name), "/new_things"
    OutputDir = (SourceDir, "/things_belonging_to_", names(name), "/new_things")

    cd "/things_belonging_to_", names(name), "/oldthings"

    % do other stuff that will be dumped in OutputDir

end

Я пытался использовать {} вместо [], Я пытался использовать sprintf и fullfile.Все, что я хочу, - это действительно скучный цикл for, и я не могу найти / понять документацию, которая показывает мне, как использовать строки в команде mkdir или cd.Я всегда получаю string input not supported или Arguments must contain a character vector.

1 Ответ

2 голосов
/ 17 апреля 2019

names = ['Tom', 'Dick', 'Harry'] делает names строкой, а не массивом строк.Чтобы использовать строковый массив, убедитесь, что у вас есть MATLAB 2016b +, где вы можете использовать двойные кавычки:

names = ["Tom", "Dick", "Harry"]

В противном случае используйте массив ячеек:

names = {'Tom', 'Dick', 'Harry'}

И получите доступ к элементам с помощью фигурных скобоки индекс:

names{1} % Tom
names{2} % Dick

В вашем коде также есть ряд других ошибок:

SourceDir = '/path/to/my/files'
mkdir([SourceDir, '/things_belonging_to_', char(names(name)), '/new_things'])
OutputDir = [SourceDir, '/things_belonging_to_', char(names(name)), '/new_things']

cd(['/things_belonging_to_', char(names(name)), '/oldthings'])

В MATLAB вы можете использовать квадратную скобку [] для объединения строк в одну.

Все в одном:

names = {'Tom', 'Dick', 'Harry'};

SourceDir = '/path/to/my/files';

for name = 1:length(names)

    mkdir([SourceDir, '/things_belonging_to_', names{name}, '/new_things'])
    OutputDir = [SourceDir, '/things_belonging_to_', names{name}, '/new_things']

    cd(['/things_belonging_to_', names{name}, '/oldthings'])

    % do other stuff that will be dumped in OutputDir

end

Дополнительные показания:

Массив строк

Символы и строки

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