Filter löschen
Filter löschen

How to Extract Numbers after a particular String from a cell in Matlab

6 Ansichten (letzte 30 Tage)
I have read and assigned the data from Excel file to the variable raw using [num2,txt,raw] = xlsread('Excelfile1.xlsx')
The Variable raw contains 547x2 cells and I want to extract all the numbers after 'Rmin and _Ymin from all the cells in first column of the cell raw. for example 1.1 and 1.1 (see cell raw{2, 1} ).
the cell raw{2, 1} contains the string Rmin1.1_Ymin1.1_Compliance864.1285_It1000 and I just want 1.1 and 1.1 and so on from all the cells of column 1.
thanking you in anticipation
  3 Kommentare
Ive J
Ive J am 6 Apr. 2022
also:
xlsread is not recommended. Use readtable, readmatrix, or readcell instead. For more information, see Compatibility Considerations.

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

Stephen23
Stephen23 am 6 Apr. 2022
Bearbeitet: Stephen23 am 6 Apr. 2022
S = load('raw.mat');
raw = S.raw
raw = 547×2 cell array
{'name' } {'length_sum'} {'Rmin1.1_Ymin1.1_Compliance864.1285_It1000'} {[ 709.4780]} {'Rmin1.1_Ymin1.2_Compliance862.1186_It1000'} {[ 709.5536]} {'Rmin1.1_Ymin1.3_Compliance998.8097_It1000'} {[ 712.5063]} {'Rmin1.1_Ymin1.4_Compliance868.5314_It1000'} {[ 707.5380]} {'Rmin1.1_Ymin1.5_Compliance862.6477_It1000'} {[ 707.6292]} {'Rmin1.1_Ymin1.6_Compliance863.5961_It931' } {[ 774.9664]} {'Rmin1.1_Ymin1.7_Compliance857.0956_It1000'} {[ 776.0780]} {'Rmin1.1_Ymin1.8_Compliance862.2392_It1000'} {[ 734.3033]} {'Rmin1.1_Ymin1.9_Compliance854.211_It1000' } {[ 712.0879]} {'Rmin1.1_Ymin1_Compliance859.3505_It1000' } {[ 702.6166]} {'Rmin1.1_Ymin2.1_Compliance890.4593_It1000'} {[ 717.9015]} {'Rmin1.1_Ymin2.2_Compliance872.4193_It1000'} {[ 721.4368]} {'Rmin1.1_Ymin2.3_Compliance868.4197_It1000'} {[ 729.6224]} {'Rmin1.1_Ymin2.4_Compliance855.7838_It1000'} {[ 739.0984]} {'Rmin1.1_Ymin2.5_Compliance865.8766_It1000'} {[ 732.0453]}
Method one:
F = @(t)sscanf(t,'Rmin%f_Ymin%f',[1,2]);
C = cellfun(F,raw(2:end,1),'uni',0);
M = vertcat(C{:})
M = 546×2
1.1000 1.1000 1.1000 1.2000 1.1000 1.3000 1.1000 1.4000 1.1000 1.5000 1.1000 1.6000 1.1000 1.7000 1.1000 1.8000 1.1000 1.9000 1.1000 1.0000
Method two:
tkn = regexp(raw(2:end,1),'^Rmin(\d+\.?\d*)_Ymin(\d+\.?\d*)','tokens','once');
M = str2double(vertcat(tkn{:}))
M = 546×2
1.1000 1.1000 1.1000 1.2000 1.1000 1.3000 1.1000 1.4000 1.1000 1.5000 1.1000 1.6000 1.1000 1.7000 1.1000 1.8000 1.1000 1.9000 1.1000 1.0000
Method three:
M = sscanf(sprintf('%s@',raw{2:end,1}),'Rmin%f_Ymin%f%*[^@]@',[2,Inf]).'
M = 546×2
1.1000 1.1000 1.1000 1.2000 1.1000 1.3000 1.1000 1.4000 1.1000 1.5000 1.1000 1.6000 1.1000 1.7000 1.1000 1.8000 1.1000 1.9000 1.1000 1.0000
  4 Kommentare
Stephen23
Stephen23 am 25 Mai 2022
Bearbeitet: Stephen23 am 25 Mai 2022
tbl = readtable('sum_length_20.xlsx')
tbl = 546×2 table
name length_sum ________________________________________________ __________ {'100_Rmin1.4_Ymin2.5_Compliance400.1796_It449'} 1443.2 {'101_Rmin1.4_Ymin2.6_Compliance413.2265_It510'} 1467.7 {'102_Rmin1.4_Ymin2.7_Compliance411.9452_It341'} 1468.9 {'103_Rmin1.4_Ymin2.8_Compliance415.3184_It480'} 1464.1 {'104_Rmin1.4_Ymin2.9_Compliance415.2841_It702'} 1452.2 {'105_Rmin1.4_Ymin3_Compliance414.67_It1000' } 1460.4 {'106_Rmin1.5_Ymin1_Compliance398.7844_It333' } 1448.5 {'107_Rmin1.5_Ymin1.1_Compliance403.9337_It189'} 1469.9 {'108_Rmin1.5_Ymin1.2_Compliance398.8366_It311'} 1447.8 {'109_Rmin1.5_Ymin1.3_Compliance398.9644_It336'} 1446.8 {'10_Rmin1_Ymin1.9_Compliance400.2463_It172' } 1494.8 {'110_Rmin1.5_Ymin1.4_Compliance420.9736_It595'} 1497.1 {'111_Rmin1.5_Ymin1.5_Compliance400.0201_It246'} 1456.6 {'112_Rmin1.5_Ymin1.6_Compliance397.5542_It311'} 1463.1 {'113_Rmin1.5_Ymin1.7_Compliance402.336_It270' } 1449.3 {'114_Rmin1.5_Ymin1.8_Compliance401.9567_It303'} 1454.3
Method one:
F = @(t)sscanf(t,'%f_Rmin%f_Ymin%f',[1,Inf]);
C = cellfun(F,tbl.name,'uni',0);
M = vertcat(C{:})
M = 546×3
100.0000 1.4000 2.5000 101.0000 1.4000 2.6000 102.0000 1.4000 2.7000 103.0000 1.4000 2.8000 104.0000 1.4000 2.9000 105.0000 1.4000 3.0000 106.0000 1.5000 1.0000 107.0000 1.5000 1.1000 108.0000 1.5000 1.2000 109.0000 1.5000 1.3000
Method two:
tkn = regexp(tbl.name,'^(\d+)\D+(\d+\.?\d*)\D+(\d+\.?\d*)','tokens','once');
M = str2double(vertcat(tkn{:}))
M = 546×3
100.0000 1.4000 2.5000 101.0000 1.4000 2.6000 102.0000 1.4000 2.7000 103.0000 1.4000 2.8000 104.0000 1.4000 2.9000 105.0000 1.4000 3.0000 106.0000 1.5000 1.0000 107.0000 1.5000 1.1000 108.0000 1.5000 1.2000 109.0000 1.5000 1.3000
Method three:
M = sscanf(sprintf('%s@',tbl.name{:}),'%f_Rmin%f_Ymin%f%*[^@]@',[3,Inf]).'
M = 546×3
100.0000 1.4000 2.5000 101.0000 1.4000 2.6000 102.0000 1.4000 2.7000 103.0000 1.4000 2.8000 104.0000 1.4000 2.9000 105.0000 1.4000 3.0000 106.0000 1.5000 1.0000 107.0000 1.5000 1.1000 108.0000 1.5000 1.2000 109.0000 1.5000 1.3000

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu Data Type Conversion finden Sie in Help Center und File Exchange

Produkte


Version

R2022a

Community Treasure Hunt

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

Start Hunting!

Translated by