背景:我正在通过uigetfile
获取文件,'multiselect'
已设置"在"。
现在:用户选择文件。
filename = [FileName(1) FileName(2) ....]
I have filename = 'name1' 'name2'.....
filename(1) = 'name1'
filename(2) = 'name2'
.
.
.
如何将其转换为filename = {'name1.m','name2.m',.....}
串联如何在这里工作?
[" ...."表示可以有两个文件,或4个,基本上取决于用户选择]
答案 0 :(得分:3)
这样的东西?
filename ={ 'name1' 'name2'};
filename =
'name1' 'name2'
output = cellfun(@(x) {horzcat(x,'.m')},filename);
output =
'name1.m' 'name2.m'
Matlab中的字符串连接与Java中的字符串连接非常相似,基本上如果你有' +' b'这会给你' ab'在Java中,在Matlab中,你连接它[' a'' b']会给你[' ab'](就像连接Char数组一样)。要对所有文件名执行此操作,您需要使用Matlab的cellfun,它将连接应用于您的每个文件名。
---- ---- EDIT
如果你想要1个字符串(1 x 1个单元格)中的所有内容:
output = cellfun(@(x) {horzcat(x,'.m, ')},filename); %//Adds the .m comma space to each string in cell
outputAll = {cat(2,output{:})}; %//Merge all cells together
outputOneString = outputAll{1}(1:end-2); %//remove the comma space at the end of the String
outputOneString =
name1.m, name2.m
答案 1 :(得分:2)
您可以在单元格数组上使用strcat:
filenames = {'name1', 'name2', 'name3'};
result = strcat(filenames, '.m')
result =
'name1.m' 'name2.m' 'name3.m'
答案 2 :(得分:0)
如果您的意思是希望filename
字符串看起来与{'name1.m','name2.m',.....}
完全相同,请尝试以下操作:
files = uigetfile('MultiSelect', 'on');
//the files here will have already the extensions of the files (e.g .m, .jpg, etc.)
s = '{'; //create a string s that starts with a {
for i=1:length(files)
//to add apostrophes, use ''''. This means one single apostrophe
s = strcat(s, '''',files(i), '''');
if i ~= length(files)
//add a comma if it is not the last file
s = strcat(s, ',');
end
end
//finish off with another }, and check your final string s
s = strcat(s, '}')