如何读取同时具有小时格式和gnu八度数字数据的数据文件?

时间:2019-02-06 13:24:11

标签: octave

我需要以八度为单位读取文件,该文件的每一行都具有时间格式(数据和小时)值以及一些温度测量值,每个温度测量值之间用分号分隔。例如,假设我的文件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 :(得分:1)

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

然后,您可以使用这些时间戳,通过简单的减法来确定相对于您想要的任何参考的差异(时间)。