首页 > 解决方案 > 循环遍历 Matlab 中的字符串数组

问题描述

我正在尝试使用 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

我尝试使用{}而不是[],我尝试使用sprintfand fullfile。我想要的只是一个非常无聊的 for 循环,我似乎无法找到/理解向我展示如何在mkdirorcd命令中使用字符串的文档。我总是以string input not supportedor结尾Arguments must contain a character vector

标签: arraysstringmatlabfor-loop

解决方案


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

进一步阅读:

字符串数组

字符和字符串


推荐阅读