csv file import with exponential notation

6 visualizaciones (últimos 30 días)
Thomas Unterholzner
Thomas Unterholzner el 29 de Dic. de 2020
Comentada: Thomas Unterholzner el 29 de Dic. de 2020
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 comentario
Ameer Hamza
Ameer Hamza el 29 de Dic. de 2020
Editada: Ameer Hamza el 29 de Dic. de 2020
Can you attach some sample datapoints from as a csv file?

Iniciar sesión para comentar.

Respuesta aceptada

Cris LaPierre
Cris LaPierre el 29 de Dic. de 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

Más respuestas (1)

Walter Roberson
Walter Roberson el 29 de Dic. de 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
  1 comentario
Walter Roberson
Walter Roberson el 29 de Dic. de 2020
You might need Prefix and Suffix to get rid of quote marks

Iniciar sesión para comentar.

Productos


Versión

R2020a

Community Treasure Hunt

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

Start Hunting!

Translated by