2016-03-18 5 views
1

Я пытаюсь искать конкретные символы в массиве и печатать выходные данные в листе Excel в том же порядке (т. Е. Если между элементами нет совпадения, он остается пустым) ,Объединение различных массивов ячеек в один в MATLAB

Я использовал следующий код внутри цикла:

EDIT:

[num,txt,~] = xlsread('protein-peptides.xls') 
for i=1:size(txt) 
str(i)=txt(i) 
expression='\w*Pyro-glu from E\w*'; 
matchStr(i)=regexp(str(i),expression,'match','once');        
ArrayOfStrings=vertcat(matchStr{:}); 
end 

После цикла:

xlswrite(filename,ArrayOfStrings,1); 

И выход, как показано ниже.

1) Элементы без матча, не показаны, как пустой

2) Каждое слово матча отображается в другой ячейке.

P y r o - g l u  f r o m  E 
P y r o - g l u  f r o m  E 
P y r o - g l u  f r o m  E 
P y r o - g l u  f r o m  E 

Как получить пустые пространства оставили в матрице и имеет все совпадения фразы в одной ячейке на выходе?

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

+0

Почему не просто передать массив ячеек в 'xlswrite'? Зачем вам его комбинировать? 'xlswrite (имя_файла, matchStr)'. – Suever

+0

Не могли бы вы рассказать больше о прилагаемом коде? Я не уверен, в каком формате находятся ваши входные данные (это ** txt ** только строка?). Просьба поделиться образцом ** txt ** и кодом для цикла ** для **. –

+0

@Suever Я непосредственно передал массив ячеек в xlswrite, и он все еще имеет тот же результат. –

ответ

1

Я знаю, что вы, вероятно, предпочитают использовать xlswrite, но я не смог чтобы заставить это работать (по крайней мере, на OS X). Похоже, что xlswrite автоматически удаляет пустые ячейки, как вы заметили. Он также, по-видимому, распространяется по каждой ячейке по нескольким столбцам, что является странным и отличается от поведения, которое я помню. Интересно, было ли последнее обновление (я использую R2015b).

Мне удалось заставить это работать, используя простые fprintf звонки для записи CSV-файла, который можно открыть в Excel. Обратите внимание, что символ окончания (\ r) является критическим; пустые ячейки, похоже, не сохраняются в Excel, если они заменяются линией перевода строки. Я также немного переработал ваш код.

% Load data from Excel file 
[~, txt, ~] = xlsread('protein-peptides.xls'); 

% Perform analysis 
expression='\w*Pyro-glu from E\w*'; 
for i = 1:length(txt) 
    matches(i, 1) = regexp(txt(i), expression, 'match', 'once'); 
end 

% Write data to CSV file 
fid = fopen('test.csv', 'w+'); 
for i = 1:length(matches) 
    fprintf(fid, '%s\r', matches{i}); 
end 
fclose(fid); 

Входной файл строки

  • Pyro-Flu от E
  • тест
  • Pyro-Flu из Е
  • тест

Выходной файл строки

  • пиро-Glu от E

  • пиро-Glu от E

+0

Спасибо, Пол, что помогло. Если у меня есть несколько совпадений для печати в соседних столбцах, как мне это сделать? Если я создаю матрицу mxn с математикой в ​​отдельных столбцах, то Matlab говорит, что функция не может принимать '' cell'inputs. Можете ли вы предложить что-то для этого? –

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