我需要从文件中读取数据并使用其数据绘制图表。问题是:
以下是数据文件的一部分,它采用txt格式:
Estation;Date;Time;Temp1;Temp2;Pressure;
83743;01/01/2016;0000;31.9;25.3;1005.1;
83743;01/01/2016;1200;31.3;26.7;1005.7;
83743;01/01/2016;1800;33.1;25.4;1004.3;
83743;02/01/2016;0000;26.1;24.2;1008.6;
我要做的是将Date
和Time
与Temp1
和Temp2
联系起来,而不是担心压力。第一列也可以忽略不计。如何将Date
,Time
和Temps
提取到矩阵中以便我可以绘制它们?到目前为止,我所做的只是:
fileID = fopen('teste.txt','r');
[A] = fscanf(fileID, ['%d' ';']);
fclose(fileID);
disp(A);
只读取第一个值83743
。
答案 0 :(得分:2)
构建于m7913d's answer:
fileID = fopen('MyFile.txt','r');
A = fscanf(fileID, ['%s' ';']); % read the header line
B = fscanf(fileID, '%d;%d/%d/%d;%d;%f;%f;%f;', [8,inf]); % read all the data into B (the date is parsed into three columns)
fclose(fileID);
B = B.'; % transpose B
% C is just for verification, can be omitted
C = datetime([B(:,4:-1:2) B(:,5)/100zeros(numel(B(:,1)),2)],'InputFormat','yyyy-MM-dd HH:mm:ss');
D = datenum(C); % Get the date in a MATLAB usable format
Titles = strsplit(A,';'); % Get column names
figure;
hold on % hold the figure for multiple plots
plot(D,B(:,6),'r')
plot(D,B(:,7),'b')
datetick('x') % Set a date tick as axis
legend(Titles{4},Titles{5}); % uses titles for legend
请注意将日期解析为C
:首先是您以dd-MM-yyyy
格式提供的日期,我将其转换为yyyy-MM-dd
的官方标准,然后是您的小时,需要除以100,然后分钟和秒为0
。当您没有完整的每小时数据时,您可能需要将这些分开。最后转换为常规datenum
,MATLAB可以使用它进行处理。
结果是:
您可能想要使用datetick
格式,因为它有很多可能对您有吸引力的选项。
答案 1 :(得分:1)
fileID = fopen('input.txt','r');
[A] = fscanf(fileID, ['%s' ';']); % read the header line
[B] = fscanf(fileID, '%d;%d/%d/%d;%d;%f;%f;%f;', [8,inf]); % read all the data into B (the date is parsed into three columns)
fclose(fileID);
disp(B');
请注意%d
读取整数(不是双精度数),%f
读取浮点数。
有关详细信息,请参阅fscanf
。