How to split alphanumerical string without delimiter?

17 vues (au cours des 30 derniers jours)
Mario
Mario le 14 Oct 2016
Commenté : Mario le 14 Oct 2016
Dear community,
I am dealing with .csv tables which contain one column of strings 'A1';'A2';...;'A100';...;'An';'B1';'B2';...;'B100';...;'Bn';'C1';'C2';...;'C100';...;'Cn';. I need to have them sorted to 'A1';'B1';'C1';'A2';'B2';'C2';...;'A100';'B100';'C100';...;'An';'Bn';'Cn'. After trying sort_nat, natsort, sortrows I tried splitting the strings which I do not know how to do without delimititer like e.g. a semicolon and sort for the numerical part. So, question: how to split strings by character without delimiter and sort by the numerical part? Thank you in adavance.

Réponse acceptée

Andrei Bobrov
Andrei Bobrov le 14 Oct 2016
f = fopen('Data20161014.csv'); % Data20161014.csv - your csv file
c = textscan(f,'%s','delimiter','\n');
fclose(f);
[~,ii] = sort(str2double(regexp(c{:},'\d+','match','once')));
out = c{:}(ii);
  5 commentaires
Andrei Bobrov
Andrei Bobrov le 14 Oct 2016
f = fopen('test_1.csv');
c = textscan(f,repmat('%s ',1,129),'delimiter',',','headerlines',1);
fclose(f);
[~,ii] = sort(str2double(regexp(c{6},'\d+','match','once')));
out = cellfun(@(x)x(ii),c(1:end-1),'un',0);
Mario
Mario le 14 Oct 2016
Thank you very much for your help, Andrei Bobrov, this is great!

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Dates and Time 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