Import data with column separated with a comma, and comma as decimal place symbol

2 visualizaciones (últimos 30 días)
Hello
I want to import a .csv data file with comma both for decimal place symbol and as system for divide the column, see below.
0,"0","0,9025","0","0,0341856"
0,05,"0","0,9","0","0,03409091"
0,1,"0,0003333325","0,9","0,001851847","0,03409091"
0,15,"0,001333333","0,9025","0,007407404","0,0341856"
How can I import the data? Matlab do not recognize the difference between the comma of the decimal place and the comma of the comulm deviders.
Regards

Respuesta aceptada

Alberto Mora
Alberto Mora el 7 de Jun. de 2019
Editada: Alberto Mora el 10 de Feb. de 2021
I developed the following code, reading and modifying the comma and other symbol in the text.
fid = fopen([PathAndFileName,'.csv'],'r'); % Open file
C = textscan(fid, '%s'); % Read file
fclose(fid); % Close file
C=strrep(C{1,1},'","',' '); % Modify "," into a space
C=strrep(C,'"',''); % Delete remaining "
C=strrep(C,',','.'); % From comma to point decimal simbol
Data=zeros(numel(C),length(str2num(C{end,1}))); % Initialize matrix
for n = 1:numel(C)
Data(n,:) = str2num(C{n,1}); % Divide all rows into the columns
end
  2 comentarios
Stephen23
Stephen23 el 12 de Feb. de 2021
str = fileread('myfile.txt');
str = regexprep(str,{'(\d),(\d)','"?,?"'},{'$1.$2',' '});
mat = sscanf(str,'%f',[5,Inf]).' % more efficient than STR2NUM in a loop
mat = 4×5
0 0 0.9025 0 0.0342 0.0500 0 0.9000 0 0.0341 0.1000 0.0003 0.9000 0.0019 0.0341 0.1500 0.0013 0.9025 0.0074 0.0342
Alberto Mora
Alberto Mora el 12 de Feb. de 2021
Thank you for your suggestion Stephen! Your method is more efficent.

Iniciar sesión para comentar.

Más respuestas (1)

Debasish Samal
Debasish Samal el 7 de Jun. de 2019
One thing that you can do here is import the data and save it in a variable say 'var'. Then replace the commas by a decimal point.
var =[ '0',"0","0,9025","0","0,0341856",...
'0','05',"0","0,9","0","0,03409091",...
'0','1',"0,0003333325","0,9","0,001851847","0,03409091",...
'0','15',"0,001333333","0,9025","0,007407404","0,0341856"];
for i = 1:numel(var)
res = [res cellfun(@(x)strrep(x,',','.'), var(i), 'Uni',0)];
end

Etiquetas

Productos

Community Treasure Hunt

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

Start Hunting!

Translated by