How to change a certain array cell depending on its length

조회 수: 4 (최근 30일)
Nom
Nom 2019년 9월 19일
댓글: Nom 2019년 9월 19일
Hello,
I currently have this very simple code:
if strlength(A) >= 250
A = [];
end
My objective is for every cell that A has which is larger than 250 characters, make that specific array row 0.
e.g. ( The 12th row of array A has more than 250 characters in it, thus it should become 0 after the code runs)
However, my problem is that the program just skips over the if statement as if it's false when in reality I have characters which go beyond 250.
I tried implementing the cellfun into this as well just in case every row of the array isn't being checked.
if cellfun(@strlength, A)>=250
A = [];
end
but still the same problem.
I know the if statement isn't false because upon running just
strlength(A) >= 250
I have a whole list of 0's (which corespond to characters under 250) and some 1's (which are those above 250)

채택된 답변

Adam Danz
Adam Danz 2019년 9월 19일
편집: Adam Danz 2019년 9월 19일
If 'A' is a cell array of character vectors and you'd like to replace cells that have a length greater than 250 with an empty char array,
A(strlength(A)>250) = {''};
For string arrays (ie, ["abc", "def", "ghi" ...],
A(strlength(A)>250) = "";
  댓글 수: 8
Adam Danz
Adam Danz 2019년 9월 19일
If A is a cell array of paths and you're trying to eliminate the paths and keep the filenames, this would be a better approach:
[~,filenames] = cellfun(@fileparts,A,'UniformOutput',false)
Nom
Nom 2019년 9월 19일
편집: Nom 2019년 9월 19일
I've decided to use your first method, just because I understand it much more clearly.
Main reason I'm doing this is because excel has a 255 column width limit which gives an error if I try query a file whose path is more than 255 characters. By just removing the file path's header (which just removes where the file was searched for) I can still retain the important information of where the file is located.
Thank you so much though Adam,
I really really appreciate all the help you provide.

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

추가 답변 (1개)

Fabio Freschi
Fabio Freschi 2019년 9월 19일
편집: Fabio Freschi 2019년 9월 19일
mask = strlength(A) > 250;
A(mask) = cellfun(@(i) '', A(mask), 'uniform', 0);
  댓글 수: 1
Nom
Nom 2019년 9월 19일
Thank you for your answer Sir,
I've decided to use
A(strlength(A)>250) = {''};
As it's just one simple line of code which acomplishes exactly what I needed it to do.
Thank you so much though!

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

카테고리

Help CenterFile Exchange에서 Characters and Strings에 대해 자세히 알아보기

제품


릴리스

R2017b

Community Treasure Hunt

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

Start Hunting!

Translated by