Splitting integers and floating values from a string in MATLAB

1 vue (au cours des 30 derniers jours)
Teja Reddy
Teja Reddy le 21 Déc 2022
Hi,
Thank you all.
I would like to read a values from a string which has text, values, space, etc., as shown below.
I would like to take only integer and floating values in the shown content shown in bold text.
There is one space in the starting of each line in the string of bold text.
I donot require any other text in the following.
File C:\Users\Black\Desktop\
TABLE: "PROGRAM CONTROL"
ProgramName=aa Version=21.2.0 ProgLevel=Ultimate LicenseNum=3010*1D7V2883PA2XZJW LicenseOS=Yes LicenseSC=Yes LicenseHT=No CurrUnits="C" SteelCode="b" ConcCode="ACI 318-14" AlumCode="d" _
ColdCode=AISI-ASD96 RegenHinge=Yes
TABLE: "movements"
k=1 Type=NonDirHist StepType=Time StepNum=0 C1=0 C2=0 U3=0 G1=0 R2=0 R3=0
k=1 ype=NonDirHist StepType=Time StepNum=0.1 C1=0 C2=0 U3=0 G1=0 R2=0.0224418047676415 R3=0
k=1 Type=NonDirHist StepType=Time StepNum=0.2 C1=0 C2=0 U3=0 G1=0 R2=0.0261030403456047 R3=0
k=1 Type=NonDirHist StepType=Time StepNum=0.3 C1=0 C2=0 U3=0 G1=0 R2=0.0352000343350302 R3=0
END TABLE DATA
Thank you
  4 commentaires
Stephen23
Stephen23 le 21 Déc 2022
Is the spelling mistake on the second line of the table really in the original data? (Type -> ype)
Teja Reddy
Teja Reddy le 21 Déc 2022
Yes, I am sorry, there is a spelling mistake.

Connectez-vous pour commenter.

Réponse acceptée

Stephen23
Stephen23 le 22 Déc 2022
Here an approach which returns a table, which might be more useful for accessing your data:
T = readtable('ex.txt', 'NumHeaderLines',5, 'Delimiter',{'=',' '}, ...
'MultipleDelimsAsOne',true, 'LeadingDelimitersRule','ignore',...
'MissingRule','omitrow')
T = 4×20 table
Var1 Var2 Var3 Var4 Var5 Var6 Var7 Var8 Var9 Var10 Var11 Var12 Var13 Var14 Var15 Var16 Var17 Var18 Var19 Var20 _____ ____ ________ ______________ ____________ ________ ___________ ____ ______ _____ ______ _____ ______ _____ ______ _____ ______ ________ ______ _____ {'k'} 1 {'Type'} {'NonDirHist'} {'StepType'} {'Time'} {'StepNum'} 0 {'C1'} 0 {'C2'} 0 {'U3'} 0 {'G1'} 0 {'R2'} 0 {'R3'} 0 {'k'} 1 {'ype' } {'NonDirHist'} {'StepType'} {'Time'} {'StepNum'} 0.1 {'C1'} 0 {'C2'} 0 {'U3'} 0 {'G1'} 0 {'R2'} 0.022442 {'R3'} 0 {'k'} 1 {'Type'} {'NonDirHist'} {'StepType'} {'Time'} {'StepNum'} 0.2 {'C1'} 0 {'C2'} 0 {'U3'} 0 {'G1'} 0 {'R2'} 0.026103 {'R3'} 0 {'k'} 1 {'Type'} {'NonDirHist'} {'StepType'} {'Time'} {'StepNum'} 0.3 {'C1'} 0 {'C2'} 0 {'U3'} 0 {'G1'} 0 {'R2'} 0.0352 {'R3'} 0
C = cellstr(mode(categorical(T{:,1:2:end}),1));
T = T(:,2:2:end);
T.Properties.VariableNames = C
T = 4×10 table
k Type StepType StepNum C1 C2 U3 G1 R2 R3 _ ______________ ________ _______ __ __ __ __ ________ __ 1 {'NonDirHist'} {'Time'} 0 0 0 0 0 0 0 1 {'NonDirHist'} {'Time'} 0.1 0 0 0 0 0.022442 0 1 {'NonDirHist'} {'Time'} 0.2 0 0 0 0 0.026103 0 1 {'NonDirHist'} {'Time'} 0.3 0 0 0 0 0.0352 0

Plus de réponses (1)

Mathieu NOE
Mathieu NOE le 21 Déc 2022
hello
try this
Str = readlines('ex.txt');
ind1 = find(contains(Str,'TABLE: "movements"'));
ind2 = find(contains(Str,'END TABLE DATA'));
Str = Str(ind1+1:ind2-1);
B = regexp(Str,'\d+(\.)?(\d+)?','match');
% convert string to num array
for ci = 1:numel(B)
out(ci,:) = str2double(B{ci});
end
  2 commentaires
Teja Reddy
Teja Reddy le 21 Déc 2022
Thank you Mathieu NOE, this works for me.
Mathieu NOE
Mathieu NOE le 21 Déc 2022
My pleasure !

Connectez-vous pour commenter.

Catégories

En savoir plus sur Characters and Strings 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