Read a string with numbers and scientific notations
4 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
BRC
am 4 Jul. 2017
Kommentiert: Walter Roberson
am 4 Jul. 2017
Dear All,
I am trying to read a text file looks like this:
# Counters
sec=60, Monitor=8.66289e+06, bstop=818664, I0=829726, I1=0, ch5=0, ch6=0, ch7=0.
I would like to read the Monitor value (8.66289e+06). I was using
k=sprintf('txt_files/MnO2_20170512_05120943_%04d.txt',i);
filetext=fileread(k);
numbers = str2double(regexp(filetext, '(?<=Monitor=[^0-9]*)[0-9]*\.?[0-9]+', 'match'));
In this way I can get the number "8.66289". But today I would like to include the scientific notation as well. So my output will be "8.66289e+06". I am not really sure how to proceed with this even though I searched in the forum.
I tried
numbers3 = regexp(filetext, '(?<== )((\d|(+)|(\.)|(e))+','match');
and
numbers3=sscanf(sprintf('%s ',numbers3{:}),'%g')
But looks like something was not right in my code.
Thank you for help!
0 Kommentare
Akzeptierte Antwort
Walter Roberson
am 4 Jul. 2017
S = 'sec=60, Monitor=8.66289e+06, bstop=818664, I0=829726, I1=0, ch5=0, ch6=0, ch7=0.';
result = regexp(S, '(?<name>\w+)=(?<value>[^,]+)', 'names');
>> result(2)
ans =
struct with fields:
name: 'Monitor'
value: '8.66289e+06'
3 Kommentare
Walter Roberson
am 4 Jul. 2017
all_values_as_numeric = str2double( {result.value} );
Note: if you can count on the order being the same each time, then
S = 'sec=60, Monitor=8.66289e+06, bstop=818664, I0=829726, I1=0, ch5=0, ch6=0, ch7=0.';
result = regexp(S, '(?<==)([^,]+)', 'match');
all_values_as_numeric = str2double(result);
Weitere Antworten (0)
Siehe auch
Kategorien
Mehr zu Characters and Strings finden Sie in Help Center und File Exchange
Produkte
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!