2016-12-19 3 views
1

Я пытаюсь сохранить самую длинную результирующую строку после использования функции strsplit не в состоянии сделать этохранения самой длинной строки после strsplit

например: у меня есть входные строки, такие как «R.DQDEGNFRRFPTNAVSMSADENSPFDLSNEDGAVYQRD.L'or » L.TSNKDEEQRELLKAISNLLD '

Мне нужно сохранить строку только между точками (.) Если точки нет, тогда я хочу всю строку. Каждая строка может иметь нуль, одну или две точки.

часть кода, который я использую:

for i=1:700 
    x=regexprep(txt(i,1), '\([^\(\)]*\)',''); 

    y=(strsplit(char(x),'.')); 

    for j=1:3 

     yValues(1,j)=y{1,j}; 
    end 
end 

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

Assignment has more non-singleton rhs dimensions than non-singleton subscripts

Что я делаю неправильно и есть ли какие-либо предложения по его устранению?

+0

Вы проверили, что y имеет размеры, которые вы ожидаете? Является ли yValues ​​массив ячеек или матрица? – Cecilia

ответ

2

Вопрос заключается в том, что y является массивом ячеек, и каждый элемент содержит всю строку и, следовательно, не может быть отнесен к одному элементу в обычном массиве yvalues(1,j).

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

yValues{j} = y{j}; 

Или более просто

% Outside of your loop 
yValues = cell(1,3); 

% Then inside of your loop 
yValues(j) = y(j); 

С другой стороны, если вы просто хотите, самый длинный выход strsplit, вы можете просто сделать что-то вроде этого.

% Split the string 
parts = strsplit(mystring, '.'); 

% Find the length of each piece and figure out which piece was the longest 
[~, ind] = max(cellfun(@numel, parts)); 

% Grab just the longest part 
longest = parts{ind}; 
+0

Это сработало. Благодаря! –

 Смежные вопросы

  • Нет связанных вопросов^_^