Прочитать текстовый файл с запятой десятичного разделителя в 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
Другие вопросы по тегам