csv file import with exponential notation

4 views (last 30 days)
Hello,
I importet data from a sensor reading and wanted to plot them (force over time)
as the force data contained commata I had to convert them, but I still have a wrong graph as the exponential notation is not 'detected'.
This is my script:
%%read txt file with force measurement, save datevec
Data = readtable('CSV-file.csv','TextType','string'); %add name of csv file (readtable)
waveform = table2array(Data(:,1)); %table to cell time vector
Y = table2array(Data(:,2)); %save force in waveform
Y([1,2,3,4,5],:) = []; %delete rows 1-5 force vector
waveform([1,2,3,4,5],:) = []; %delete rows 1-5 time vector
Data2 = strrep(Y, ',', '.');
Timevector = datetime (waveform ,'InputFormat','dd.MM.yyyy HH:mm:ss,SSSSS');
Data21 = categorical(Data2(:,1));
plot (Timevector, Data21,'b*');
yyy HH:mm:ss,SSSSS');
Data21 = categorical(Data2(:,1));
plot (Timevector, Data21,'b*');
my Data (.csv):
and this is my current plot vs. the actual plot:
is there a way to format the string, so that the exponential notation is right?
  1 Comment
Ameer Hamza
Ameer Hamza on 29 Dec 2020
Edited: Ameer Hamza on 29 Dec 2020
Can you attach some sample datapoints from as a csv file?

Sign in to comment.

Accepted Answer

Cris LaPierre
Cris LaPierre on 29 Dec 2020
Here's how I would do it.
%%read txt file with force measurement, save datevec
opts = detectImportOptions("CSV-file.csv","NumHeaderLines",6);
opts = setvartype(opts,"DateTime","datetime");
opts = setvaropts(opts,"DateTime","InputFormat",'dd.MM.yyyy HH:mm:ss,SSSSS');
opts = setvartype(opts,"Y_Chan_3_","string");
Data = readtable('CSV-file.csv',opts);
Warning: Column headers from the file were modified to make them valid MATLAB identifiers before creating variable names for the table. The original column headers are saved in the VariableDescriptions property.
Set 'VariableNamingRule' to 'preserve' to use the original column headers as table variable names.
% specifying the decimal separator didn't help because of the formatting.
% This replaces it with a period. This may not be necessary depending on your regional settings.
Data.Y_Chan_3_ = strrep(Data.Y_Chan_3_,',','.');
Data.Y_Chan_3_ = str2double(Data.Y_Chan_3_)
Data = 3507x2 table
DateTime Y_Chan_3_ _________________________ _________ 21.12.2020 19:21:32,15037 -0.012731 21.12.2020 19:21:32,25045 -0.012731 21.12.2020 19:21:32,35054 -0.025462 21.12.2020 19:21:32,45062 -0.012731 21.12.2020 19:21:32,55071 -0.012731 21.12.2020 19:21:32,65079 -0.012731 21.12.2020 19:21:32,75088 -0.025462 21.12.2020 19:21:32,85096 -0.025462 21.12.2020 19:21:32,95105 -0.025462 21.12.2020 19:21:33,05113 -0.025462 21.12.2020 19:21:33,15122 -0.012731 21.12.2020 19:21:33,25130 -0.025462 21.12.2020 19:21:33,35139 -0.025462 21.12.2020 19:21:33,45147 -0.038193 21.12.2020 19:21:33,55156 -0.11458 21.12.2020 19:21:33,65164 -0.29282

More Answers (1)

Walter Roberson
Walter Roberson on 29 Dec 2020
Use the decimalseparator option for readtable
https://www.mathworks.com/help/matlab/ref/detectimportoptions.html#d122e302928
I think it became available as of R2020a but that would have to be checked

Products


Release

R2020a

Community Treasure Hunt

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

Start Hunting!