Sorting data extracted from the name of a group of files

1 vue (au cours des 30 derniers jours)
Peter
Peter le 29 Déc 2014
Commenté : Peter le 29 Déc 2014
Hello,
I have a group of files named like this:
files=[{' x+0.000mm_y_+0.000mm_z_+0.000mm.dat_ '}
{' x+5.000mm_y_+10.000mm_z_+0.000mm.dat_ '
{' x+10.000mm_y_+20.000mm_z_+30.000mm.dat_ '}
{' x+15.000mm_y_+40.000mm_z_+0.000mm.dat_ '}
{' x+20.000mm_y_+60.000mm_z_+0.000mm.dat_ '}]
I need to have the X and Y coordinates this way and order:
0 0
5 10
10 20
15 40
20 60
When i use:
coord = regexp(files,'\d+(\.\d+)?','match')
I oibtain the three coordenates but HOWEVER they are not displayed in the same order as the name of the files, and it is a very important problem, to solve.
I need somehow to have the 3 coordinates in the same order as the files whose they are extracted.
Do you know how to doi it? Why do they follow another order? Is this about the 'match'??
Thanks

Réponse acceptée

Jan
Jan le 29 Déc 2014
files = {' x+0.000mm_y_+0.000mm_z_+0.000mm.dat_ ', ...
' x+5.000mm_y_+10.000mm_z_+0.000mm.dat_ ', ...
' x+10.000mm_y_+20.000mm_z_+30.000mm.dat_ ', ...
' x+15.000mm_y_+40.000mm_z_+0.000mm.dat_ ', ...
' x+20.000mm_y_+60.000mm_z_+0.000mm.dat_ '}
coordC = regexp(files,'\d+(\.\d+)?','match');
coord = cat(1, coords{:});
Reply:
'0.000' '0.000' '0.000'
'5.000' '10.000' '0.000'
'10.000' '20.000' '30.000'
'15.000' '40.000' '0.000'
'20.000' '60.000' '0.000'
This exactly the same order as the list of file names. Therefore I do not understand the question. Please post, what you observe.
  1 commentaire
Peter
Peter le 29 Déc 2014
Yes, exactly.
Both answers worked properly.
Thank you very much for the the help and for the explanation.

Connectez-vous pour commenter.

Plus de réponses (2)

Azzi Abdelmalek
Azzi Abdelmalek le 29 Déc 2014
coord=cell2mat(cellfun(@str2double,regexp(files,'(?<=(x\+)|(y_\+))\d+(\.\d+)?', 'match'),'un',0))

Geoff Hayes
Geoff Hayes le 29 Déc 2014
Peter - what order are they appearing in? If I do the following
files=[{' x+0.000mm_y_+0.000mm_z_+0.000mm.dat_ '}
{' x+5.000mm_y_+10.000mm_z_+0.000mm.dat_ '}
{' x+10.000mm_y_+20.000mm_z_+30.000mm.dat_ '}
{' x+15.000mm_y_+40.000mm_z_+0.000mm.dat_ '}
{' x+20.000mm_y_+60.000mm_z_+0.000mm.dat_ '}];
coord = regexp(files,'\d+(\.\d+)?','match');
xyzCoords = cell2mat(cellfun(@(x)str2num(char(x))',coord,'UniformOutput',false));
then
xyzCoords =
0 0 0
5 10 0
10 20 30
15 40 0
20 60 0
In the above line of code, since coord is a cell array, we use the cellfun to apply a function to each cell in the array. This function, @(x)str2num(char(x))', converts each element to a string (via char) then to a numeric array (3x1, via str2num), which is then transposed to get a row. As the result of cellfun is another cell array of numeric data, we just convert it from the cell array to a matrix via cell2mat.
  1 commentaire
Peter
Peter le 29 Déc 2014
Thank you very much Geoff Hayes, your code worked perfectlly

Connectez-vous pour commenter.

Catégories

En savoir plus sur Cell Arrays 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