Прочитать текстовый файл с запятой десятичного разделителя в MATLAB
У меня есть текстовый файл как таковой:
1,6 2 6,5 5 ... // ~ 1000 columns
0 1 4 2,5 ...
... // ~1000 rows
то есть "," как десятичный разделитель вместо "."
Как правильно прочитать это в MATLAB для вывода как таковой:
1.6 2 6 5 ...
0 1 4 2.5 ...
...
3 ответа
Нет простого встроенного способа сделать это (удивительно!). Вы захотите прочитать весь файл, затем заменить строку, а затем преобразовать результат в числа.
% 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{:});
Быстрый способ, предложенный этой веткой MathWorks Central, заключается в использовании strrep
:
data=strrep(data,'.',',')
Поэтому сначала прочитайте ваши данные как строки, затем замените запятые на точки и используйте str2num
пойти в парном разряде.
Другая возможность - просто заменить запятые точками в вашем файле, а затем загрузить новый файл в MATLAB.
На Linux или Mac мы можем использовать sed
или же tr
UNIX утилиты:
$ cat file.dat | tr ',' '.' > file2.dat
В Windows мы можем использовать PowerShell:
PS> gc file.dat | % { $_ -replace ',', '.' } | sc -encoding ascii file2.dat
В любом случае, мы можем загрузить новый файл в MATLAB просто как:
>> load -ascii file2.dat
>> disp(file2)
1.6000 2.0000 6.5000 5.0000
0 1.0000 4.0000 2.5000