Read txt file with comma decimal separator in MATL

2020-04-16 17:52发布

问题:

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 ...
...

回答1:

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{:});


回答2:

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.



回答3:

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