Comparing elements between a character and a numerical column

Not sure if this is written correctly. Suppose there is a cell array where the first column holds characters ie) 'con', 'func', key', and the second column holds numerical values ie) 74 85 98. For x = 1:length(Event) [where event is the array], if event{x,1} is 'con' AND the cell immediately after it (x+1) is 'key', take the horizontal values and place those in a new array. For example:
Column 1 = ['con', 'key', 'con', 'con', 'var', 'con', key'] Column 2 = [ 74 85 94 67 56 84 23]
The new array would look like Column 1 = ['con', 'key', 'con, 'key'] column 2 = [74 85 84 23]
for x = 1:length(event)
if event{x,1} == 'con' & event{x+1,1} == 'key'
iEvent = event{x,:}
end
end
One of the issues I think is that == does not work with characters?

 Accepted Answer

Here ares some fake data using your pattern and a solution. The solution identifies the rows of 'data' where 'key' follows 'con' and puts all of those rows into a new variable, 'output'.
data = {
'con' 74;
'key' 85;
'con' 94;
'con' 67;
'var' 56;
'con' 84;
'key' 23
'con' 67;
'var' 56;
'con' 84;
'key' 23};
% row indices of con & key
isCon = strcmp(data(:,1), 'con');
isKey = strcmp(data(:,1), 'key');
% rows of 'key' where 'con' preceded
ConKeyIdx = find(isKey(2:end) & isCon(1:end-1));
ConKeySubs = sort([ConKeyIdx;ConKeyIdx+1]); %row numbers of con-key neighbors
output = data(ConKeySubs,:);
output =
{'con'} {[74]}
{'key'} {[85]}
{'con'} {[84]}
{'key'} {[23]}
{'con'} {[84]}
{'key'} {[23]}

1 Comment

Thank you this works great! I should have thought to use strcmp with characters...

Sign in to comment.

More Answers (0)

Categories

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!