2016-03-19 4 views
2

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

ответ

1

Там нет простого встроенного способа сделать это (удивительно!). Вы захотите прочитать весь файл, затем выполнить замену строки, а затем преобразовать результат в числа.

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

Не существует? Это децимальный разделитель по умолчанию для многих стран (не США). – Adriaan

+0

@Adriaan Не то, чтобы я знал. Запятые могут быть немного сложными, поскольку они также обычно используются в качестве разделителей. Я думаю, что даже при использовании десятичных разделителей на стороне интерфейса большого количества программ большинство экспортируемых данных фактически используют периоды (кроме Excel). – Suever

+1

Да, Excel действительно использует все, что у вас есть. И это означает, что языковая установка, а не язык. Боль в прикладе на самом деле. Еще одним решением для этого было бы загрузить его в Excel и щелкнуть три кнопки в диалоговом окне, чтобы их преобразовать, но кто хочет использовать Excel в любом случае. Я бы сказал, что ваше решение хорошее. – Adriaan

0

Быстрый способ предложенный this MathWorks Central thread заключается в использовании strrep:

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

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

0

Другая возможность - просто заменить запятые на периоды в вашем файле, а затем загрузить новый файл в MATLAB.

В Linux или Mac, мы можем использовать sed или tr UNIX утилиты:

$ cat file.dat | tr ',' '.' > file2.dat 

В Windows, мы можем использовать PowerShell:

PS> gc file.dat | % { $_ -replace ',', '.' } | sc -encoding ascii file2.dat 

Eitherway, мы можем загрузить новый файл в MATLAB просто как:

>> load -ascii file2.dat 
>> disp(file2) 
    1.6000 2.0000 6.5000 5.0000 
     0 1.0000 4.0000 2.5000 
Смежные вопросы