MATLAB: Чтение значений с плавающей запятой, разделенных пробелами, из tex-файла

Я читаю текстовый файл с помощью текстового сканирования функция MATLAB. Проблема в том, что в value ничего не читается, так как числа с плавающей запятой разделены тремя пробелами, а я новичок в программировании на MATLAB, чтобы использовать эффективный синтаксис. Мой текущий код приведен ниже:

Код:

values = textscan(input_file, '%f   %f   %f   %f   %f\n %*[^\n]');

Входной файл имеет следующий формат:

Файл:

0.781844   952.962130   2251.430836   3412.734125   4456.016362
0.788094   983.834855   2228.432996   3196.415590   4378.885466
0.794344   967.653718   2200.798973   3119.844502   4374.097695

Если значения с плавающей запятой разделены #, то следующий оператор работает нормально:

values = textscan(input_file, '%f#%f#%f#%f#%f\n %*[^\n]');

Есть ли решение, кроме токенизации?


person Itban Saeed    schedule 09.09.2016    source источник
comment
Не могли бы вы привести образец строки из файла, который вы пытаетесь прочитать (например, как выглядит ваш ввод)?   -  person selyunin    schedule 09.09.2016


Ответы (2)


Вам нужно указать разделитель, также вы должны активировать MultipleDelimsAsOne, чтобы рассматривать повторяющийся пробел как один разделитель:

value = textscan(input_file, '%f   %f   %f   %f   %f \n ','Delimiter',' ','MultipleDelimsAsOne',1);

При необходимости вы также можете указать несколько разделителей одновременно:

del = {';',' '};
person obchardon    schedule 09.09.2016
comment
это не работает. Вы уверены, что в строке спецификатора формата есть пробелы? - person Itban Saeed; 09.09.2016
comment
Глядя на пример в документации, кажется, что вы можете просто использовать один пробел для разделителя. Вы пробовали это? - person Anders Schou; 09.09.2016
comment
Я отредактировал свой ответ, я тестирую этот код на вашем образце, и все работает. - person obchardon; 09.09.2016
comment
Спасибо за помощь :) - person Itban Saeed; 19.09.2016

Если вам не нужно использовать textscan, вы, вероятно, могли бы использовать importdata. Там вы можете указать разделитель в качестве параметра. Документация http://se.mathworks.com/help/matlab/ref/importdata.html

Пример кода

filename = 'myfile01.txt';
delimiterIn = '   ';
A = importdata(filename,delimiterIn);
person Anders Schou    schedule 09.09.2016
comment
Я читаю файл, строка за строкой. Возможно, мне придется изменить всю логику, чтобы использовать данные импорта. - person Itban Saeed; 09.09.2016