2016-02-25 4 views
0

Фон: Я получаю файлы через uigetfile, 'multiselect' установлен в положение «включено».строки конкатенации с дополнительными символами и символами между ними в matlab

Теперь: пользователь выбирает файлы.

filename = [FileName(1) FileName(2) ....] 
I have filename = 'name1' 'name2'..... 
filename(1) = 'name1' 
filename(2) = 'name2' 
. 
. 
. 

Как я могу сделать это в filename = {'name1.m','name2.m',.....}

Как конкатенация работает здесь?

[ «....» означает, что там может быть два файла, или 4, в основном зависит от выбора пользователя]

+0

Непонятно, к какому результату вы пытаетесь достичь, хотите ли вы массив ячеек таких файлов, как fcell = {FileName {1}, FileName {2}} – CatsLoveJazz

+0

@CatsLoveJazz ... если вы вызываете это {'name1.m', 'name2.m', .....} массив ячеек, затем да. обратите внимание, что я могу упорядочить файлы и даже положить {и} в начале и в конце соответственно, но я немного борюсь, чтобы вставить .m и ''. – statisticalbeginner

ответ

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, '}') 
+0

Супер. единственная проблема заключается в том, что ответ заключен между ''. – statisticalbeginner

+0

Когда вы показываете имя файла, Matlab автоматически показывает апострофы, окружающие строку. Но если вы используете переменную, окружающие апострофы не включены внутрь – Lincoln

+0

Как вы конвертируете имя файла в переменную? – statisticalbeginner

3

Что-то вроде этого?

filename ={ 'name1' 'name2'}; 

filename = 

'name1' 'name2' 

output = cellfun(@(x) {horzcat(x,'.m')},filename); 

output = 

'name1.m' 'name2.m' 

Объединение строк в Matlab это очень походит на Java, в основном, если у вас есть «а» + «б» это даст вам «Ab» в Java, в Matlab, вы сцепить его [ «а» , 'b'] даст вам ['ab'] (например, конкатенация Char Array). Чтобы сделать это для всех ваших имен файлов, вам нужно будет использовать cellfun Matlab, который применяет конкатенацию к каждому из ваших имен файлов.

---- EDIT ----

Если вы хотите, чтобы все в 1 String (1 х 1 Cell):

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 
+0

Спасибо. Это прекрасно работает. но как вы помещаете «,» между файлами? – statisticalbeginner

2

Вы можете использовать strcat на массив ячеек:

filenames = {'name1', 'name2', 'name3'}; 
result = strcat(filenames, '.m') 

result = 

    'name1.m' 'name2.m' 'name3.m' 
Смежные вопросы