How to split alphanumerical string without delimiter?

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.

 Respuesta aceptada

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 comentarios

Mario
Mario el 14 de Oct. de 2016
Thank you very much Andrei Bobrov for this fast response! Of course it works. Where, however, do I tell the target colum to sort by, which is the sixth column in my data?
Please attach your file with data (small part of him).
Mario
Mario el 14 de Oct. de 2016
Yes, thank you.
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 el 14 de Oct. de 2016
Thank you very much for your help, Andrei Bobrov, this is great!

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Etiquetas

Preguntada:

el 14 de Oct. de 2016

Comentada:

el 14 de Oct. de 2016

Community Treasure Hunt

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

Start Hunting!

Translated by