Как прочитать файл данных, который имеет как часовой формат, так и числовые данные в октаву GNU? - PullRequest
0 голосов
/ 06 февраля 2019

Мне нужно прочитать файл в октаве, в каждой строке есть значения формата времени (данные и часы) и некоторые измерения температуры, каждое из которых разделено точкой с запятой.Например, предположим, что мой файл, filename.txt, имеет следующие ДАННЫЕ:

08/07/2018;09:50:51;0.0;0.0;19.6
08/07/2018;09:50:58;0.0;0.0;19.5
08/07/2018;09:51:12;0.0;0.0;19.5

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

M = dlmread('filename.txt',";")

, но октавы на самом деле читает:

M = 
8 9 0 0 19.6
8 9 0 0 19.5
8 9 0 0 19.5

Как сказать, чтобы октава прочитала полностьюцелые данные в файле?

Спасибо за любую помощь

1 Ответ

0 голосов
/ 06 февраля 2019

dlmread попытается заставить все быть числом, чтобы он мог вернуть результат в матрице.Вместо использования dlmread вы, вероятно, захотите использовать вместо него textscan, прочитав первые два столбца в виде строк, а оставшиеся столбцы в виде чисел с плавающей запятой:

fid = fopen('filename.txt', 'rb');
data = textscan(fid, '%s %s %f %f %f', 'Delimiter', ';');

Затем вы можете объединить первый и второйстолбцы в строку даты и вычислите их datenum, что позволит вам поместить все в числовую матрицу, где первый столбец является отметкой времени:

dates = cellfun(@(day, time)datenum([day, ' ', time], 'mm/dd/yyyy HH:MM:SS'), data{1:2})
data = [dates(:), data{3:end}]

%   737279.41031        0.00000        0.00000       19.60000
%   737279.41039        0.00000        0.00000       19.50000
%   737279.41056        0.00000        0.00000       19.50000

Затем вы можете использовать эти отметки времени, чтобы определить разницу (во времени) относительно любой ссылки, которую вы хотите использовать, используя простое вычитание.

...