MATLAB Answers

0

How to replace commas with dot

Asked by Algirdas Kluonius on 8 May 2013
Latest activity Commented on by Thuy Hoang on 19 Mar 2018
Hello everyone can someone help me, I have german IFM optics sensor and it gives me a file with german formatting. That means comma instead of dot. So if i have a number 0,25 matlab can't understand it correctly, i need to change it from 0,25 to 0.25. I found a link which does not help, because it's faulty http://www.mathworks.com/matlabcentral/answers/51399
it suggests to use data = strrep (a, ',' , '.') but as i use it, yeah i get it 0.25 from 0,25 but if i try to test it and write: >> data>1 ans = 1 1 1 1
if i write data+1 ans = 49 47 51 54
can someone help me on this one, because later csv file has 50 rows like this "0,95084310;0,95006830;0,99675316;0,99362558;1, ...." which is actually a first column of a picture. Thanks in advance

  2 Comments

Suppose that you have a .txt file that contains the following data:
0,950843;0,95006830;0,99675316;0,99362558;
1,950843;1,95006830;1,99675316;1,99362558;
The following code converts it into a double array:
fid=fopen('sample.txt');
data=textscan(fid,'%s %s %s %s','Delimiter',';');
fclose(fid);
for i=1:4
for j=1:2
data{i}{j}=str2double(strrep(data{i}{j},',','.'));
end
data{i}=cell2mat(data{i});
end
data=cell2mat(data);
Good luck!
First answer is wrong because I have 64 values in a row and I can't write '%s' 64 times and it also does not work.

Sign in to comment.

2 Answers

Answer by Andreas Goser on 9 May 2013

I created this one a million years ago - not sure if it works today:
function comma2dot()
%COMMA2DOT converts comma decimal separator data into dot decimal separator data
% COMMA2DOT() opens an ASCII file finds all comma characters, changes
% them into dot characters and saves the data as a new ASCII file
% V 1.0: Andreas Goser, 7.4.2001
[fname, pname]=uigetfile('*.*', 'ASCII data file with comma decimal separator');
if fname
data=char(textread([pname, fname], '%s', 'delimiter', '\n', 'whitespace', ''));
for k=1:size(data, 1)
f=findstr(data(k, :), ',');
data(k, f)='.';
end
ind=findstr(fname, '.');
fid=fopen([pname, fname(1:ind-1), '_dot', fname(ind:length(fname))], 'w');
for k=1:size(data, 1)-1
fprintf(fid, '%s\r\n', data(k, :));
end
fprintf(fid, '%s', data(size(data, 1), :));
fclose(fid);
disp([pname, fname(1:ind-1), '_dot', fname(ind:length(fname)), ' written']);
end

  1 Comment

OK! dear Supper Man! I thank you so much. :) It's so good! :) Thank you so much again.

Sign in to comment.


Answer by Jason Ross
on 8 May 2013

Have you tried using the Import Data Wizard? One of the options allows you to set the delimiter to be a comma. You can use generate a function or a script once the data looks good that will have the relevant import code in it.

  1 Comment

The import wizard gives a string and works partially in any case i need to modify all anyway

Sign in to comment.