Reversing parts of (even) items in a listbox (cellarray)

조회 수: 2 (최근 30일)
Jason
Jason 2021년 1월 18일
편집: Cris LaPierre 2021년 1월 19일
Hello, I have items in a listbox (so cell array) - the integers before the "r" can be any number from 1-12.
My aim is to take any line containing an even number after r (r2, r4 etc) and reverse the other numbers and then put back into the list box
So line 2 & 4 would change to
1 2 3 r2 -> 3 2 1 r2
1 2 3 r4 -> 3 2 1 r4
This was my attempt.
items=app.ListBoxPos.Items
nl=numel(items);
rstr=["r2","r4","r6","r8"];
s1=[];
out={};
for i=1:nl
line=char(items(i));
if contains(line, rstr)
tokens = strsplit(line, 'r' )
t=fliplr(tokens{1,1})
new=[t,' r',tokens{1,2}]
app.ListBoxPos.Items{i}=new
%Not sure what to do now!
end
end
Not sure if this is the most elegant way, and it falls over trying to overwrite the line in the listbox.
Thanks for any help
Jason

채택된 답변

Cris LaPierre
Cris LaPierre 2021년 1월 18일
You can use mod to determine if the last number is even or not. I would then use indexing to reverse the order of the rows that end in an even number.
items=app.ListBoxPos.Items
nl=numel(items);
for i=1:nl
if mod(items{i}(end),2)==0
out{i}=items{i}([end-3:-1:1 end-2:end]);
else
out(i)=items(i);
end
end
app.ListBoxPos.Items = out;
  댓글 수: 8
Cris LaPierre
Cris LaPierre 2021년 1월 19일
편집: Cris LaPierre 2021년 1월 19일
What version of MATLAB are you using?
It's good to see you coming up with your own approach. Nice job. Just be aware that this solution suffers from the original problem - it doesn't work when the final number has 2 digits (10 or 12).
Jason
Jason 2021년 1월 19일
Im using 2020b

댓글을 달려면 로그인하십시오.

추가 답변 (1개)

Jason
Jason 2021년 1월 19일
편집: Jason 2021년 1월 19일
Here is my solution based on Cris' answer:
val = app.SNAKESCANCheckBox.Value;
switch val
case 1
items=app.ListBoxPos.Items;
nl=numel(items);
out={};
for i=1:nl
L=str2num(items{i}(end));
if mod(L,2)==0
out{i}=items{i}([end-3:-1:1 end-2:end]);
else
out{i}=items{i};
end
end
app.ListBoxPos.Items=out;
case 0
end
I thought this worked, but when I have a number 10,11 or 12 (my numbers can be 1-12), then it doesn't quite work - Its reversing the order of the double digits
  댓글 수: 1
Cris LaPierre
Cris LaPierre 2021년 1월 19일
When the number at the end is 2 characters, it would require a different approach. Perhaps finding the 'r' and using that to set the index rather the 'end'.

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Dialog Boxes에 대해 자세히 알아보기

제품


릴리스

R2020b

Community Treasure Hunt

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

Start Hunting!

Translated by