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

person delkov    schedule 19.03.2016    source источник


Ответы (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{:});
person Suever    schedule 19.03.2016
comment
Разве нет? Это десятичный разделитель по умолчанию во многих странах (кроме США). - person Adriaan; 19.03.2016
comment
@ Адриан Не то, чтобы я знал. Запятые могут быть немного сложными, поскольку они также обычно используются в качестве разделителей. Я думаю, что даже несмотря на то, что они используются в качестве десятичных разделителей на стороне пользовательского интерфейса многих программ, в большинстве экспортируемых данных фактически используются точки (кроме Excel). - person Suever; 19.03.2016
comment
Да, Excel действительно использует любые системные настройки. И это означает настройку локали, а не языка. Боль в заднице на самом деле. Таким образом, другим решением для этого было бы загрузить его в Excel и нажать три кнопки в диалоговом окне, чтобы преобразовать их, но кто все равно хочет использовать Excel. Я бы сказал, что ваше решение хорошее. - person Adriaan; 19.03.2016
comment
идеально! Разве вы не знаете, как получить количество столбцов? - person delkov; 19.03.2016
comment
@delkov Проверьте мое обновление. Вам больше не нужно знать количество столбцов, если вы использовали обновленный подход. - person Suever; 19.03.2016
comment
@Suever нет, это имеет большое значение, но вы, вероятно, захотите вместо этого открыть файл в текстовом режиме rt (предполагается, что он правильно обрабатывает окончания строк LF/CRLF) - person Amro; 21.03.2016

Быстрый способ, предложенный этот поток MathWorks Central должен использовать strrep:

data=strrep(data,'.',',')

Итак, сначала прочитайте свои данные в виде строк, затем замените запятые точками и используйте str2num, чтобы перейти к двойникам.

person Adriaan    schedule 19.03.2016

Другая возможность — просто заменить запятые точками в вашем файле, а затем загрузить новый файл в 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
person Amro    schedule 20.03.2016