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.

 Akzeptierte Antwort

Andrei Bobrov
Andrei Bobrov am 14 Okt. 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 Kommentare

Mario
Mario am 14 Okt. 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 am 14 Okt. 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 am 14 Okt. 2016
Thank you very much for your help, Andrei Bobrov, this is great!

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Gefragt:

am 14 Okt. 2016

Kommentiert:

am 14 Okt. 2016

Community Treasure Hunt

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

Start Hunting!

Translated by