How can I use the split function with multiple delimiters?

37 vues (au cours des 30 derniers jours)
Deon Hargrove
Deon Hargrove le 27 Fév 2020
Commenté : Stephen23 le 28 Fév 2020
I am trying to use the split command on a cell Array but I am getting this error:
Element 77 of the text contains 2 delimiters while the previous elements have 1. All
elements must contain the same number of delimiters.
The problem is that in the line below
software_logical/forIteratorSubsystem/Out1. Some of the elements in my have different number of delimiters.
software_math/sum
This the code I am using below. What can I do so that my program will split at the last delimiter ('/')
cellArray = split(compareBlocks,'/');
cellArray = split(compareBlocks,'/',2); %I even tride using this but it does not work

Réponse acceptée

Stephen23
Stephen23 le 27 Fév 2020
Modifié(e) : Stephen23 le 27 Fév 2020
>> str = 'software_logical/forIteratorSubsystem/Out1';
>> [one,two] = fileparts(str)
one = software_logical/forIteratorSubsystem
two = Out1
>> str = 'software_math/sum';
>> [one,two] = fileparts(str)
one = software_math
two = sum
For character vectors in a cell array call fileparts inside of cellfun.
  4 commentaires
Deon Hargrove
Deon Hargrove le 27 Fév 2020
Sure did. Played around with the various ways I could use it.
This is the most recent
cellArray = cell(fileparts(compareBlocks))
Stephen23
Stephen23 le 28 Fév 2020
cellArray = cell(fileparts(compareBlocks))
will place the first output (i.e. the "path") of the split compareBLocks variable into a scalar cell array, and discards the rest. There does not seem to be much point in doing that.
Lets try my answer on a cell array, using cellfun as I mentioned:
>> C = {'software_logical/forIteratorSubsystem/Out1', 'software_math/sum'};
>> [one,two] = cellfun(@fileparts, C, 'uni',0);
>> one{:}
ans = software_logical/forIteratorSubsystem
ans = software_math
>> two{:}
ans = Out1
ans = sum

Connectez-vous pour commenter.

Plus de réponses (1)

Akira Agata
Akira Agata le 28 Fév 2020
How about using cellfun, like:
% Sample cell array
C = {'software_logical/forIteratorSubsystem/Out1', 'software_math/sum'};
% Apply 'split' for each cell
parts = cellfun(@(x) split(x,'/'),C,'UniformOutput',false);
The result is like this:
>> parts{1}
ans =
3×1 cell array
{'software_logical' }
{'forIteratorSubsystem'}
{'Out1' }
>> parts{2}
ans =
2×1 cell array
{'software_math'}
{'sum' }
  2 commentaires
Deon Hargrove
Deon Hargrove le 28 Fév 2020
What is x in your code?
Stephen23
Stephen23 le 28 Fév 2020
"What is x in your code?"
x is the input argument to an anoymous function:

Connectez-vous pour commenter.

Catégories

En savoir plus sur Logical dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by