问题
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
来源:https://stackoverflow.com/questions/36103686/read-txt-file-with-comma-decimal-separator-in-matlab