I have a txt file as such:
1,6 2 6,5 5 ... // ~ 1000 columns
0 1 4 2,5 ...
... // ~1000 rows
that is, "," as a decimal separator instead of "."
How to read this properly in MATLAB to output as such:
1.6 2 6 5 ...
0 1 4 2.5 ...
...
I have a txt file as such:
1,6 2 6,5 5 ... // ~ 1000 columns
0 1 4 2,5 ...
... // ~1000 rows
that is, "," as a decimal separator instead of "."
How to read this properly in MATLAB to output as such:
1.6 2 6 5 ...
0 1 4 2.5 ...
...
There is no easy built-in way of doing this (surprisingly!). You'll want to read in the entire file, then do a string replacement, and then convert the result into numbers.
% Read file in as a series of strings
fid = fopen('data.txt', 'rb');
strings = textscan(fid, '%s', 'Delimiter', '');
fclose(fid);
% Replace all commas with decimal points
decimal_strings = regexprep(strings{1}, ',', '.');
% Convert to doubles and join all rows together
data = cellfun(@str2num, decimal_strings, 'uni', 0);
data = cat(1, data{:});
A quick way suggested by this MathWorks Central thread is to use strrep
:
data=strrep(data,'.',',')
So first read your data as strings, then replace commas with dots and use str2num
to go to doubles.
Another possibility is simply replacing commas with periods in your file, then load the new file in MATLAB.
On Linux or Mac, we can use sed
or tr
UNIX utilities:
$ cat file.dat | tr ',' '.' > file2.dat
On Windows, we can use PowerShell:
PS> gc file.dat | % { $_ -replace ',', '.' } | sc -encoding ascii file2.dat
Eitherway, we can load the new file in MATLAB simply as:
>> load -ascii file2.dat
>> disp(file2)
1.6000 2.0000 6.5000 5.0000
0 1.0000 4.0000 2.5000