从文本文件中读取和绘图

时间:2011-09-22 13:33:19

标签: matlab file-io plot

我在从文本文件中读取数据并绘制它时遇到一些问题。文本文件包含

Date; Time; Temp °C
05.08.2011; 11:00:47;23.75
05.08.2011; 11:01:21;23.69
05.08.2011; 11:01:56;25.69
05.08.2011; 11:02:16;23.63
05.08.2011; 11:02:50;23.63
05.08.2011; 11:03:24;23.63

我想用经过的分钟绘制温度值。 首先我用了

[a,b]=textread('file1.txt','%s %s','headerlines',1)

以字符串形式读取数据,我得到了

'17:09:16;21.75'

之后我用

  
    

a = strread('17:08:00; 21.81','%s','delimiter',';')

  

获取

'17:08:00'
'21.81'

但在此之后,我无法弄清楚如何继续处理这两个字符串,特别是时间。 我想在x轴上绘制温度和时间。但这次不是经过的时间......在这种情况下2分37秒。 需要帮助

非常感谢Aabaz.thats真的很受欢迎。我为什么能弄清楚...我花了很多时间在它身上 我有大约50个文件包含这个数据..如果我想在这个代码下循环它,怎么能完成它,cz我有ROM ID下的文件的名称..alike 1AHJDDHUD1224.txt。 wud如何在循环中传递文件名。我必须更改文件的名称然后在循环下传递它们。我知道吗

我还有一个问题,如果我希望每隔60秒后绘制一次值...就像数据在文本文件中可用时一样,绘制图表,然后在每60秒后更新图表直到更多值可在文本文件中找到

2 个答案:

答案 0 :(得分:4)

请考虑以下代码。它将遍历特定目录中的所有.DAT文件,读取数据文件,然后绘制格式为日期/时间的x轴:

%# get a list of files
BASE_DIR = 'C:\Users\Amro\Desktop';
files = dir( fullfile(BASE_DIR,'*.dat') );
files = {files.name};

%# read all files first
dt = cell(numel(files),1);
temps = cell(numel(files),1);
for i=1:numel(files)
    %# read data file
    fname = fullfile(BASE_DIR,files{i});
    fid = fopen(fname);
    C = textscan(fid, '%s %s %f', 'delimiter',';', 'HeaderLines',1);
    fclose(fid);

    %# datetime and temperature
    dt{i} = datenum( strcat(C{1},{' '},C{2}) );
    temps{i} = C{3};
end

现在我们可以绘制数据(比如我们有16个文件,因此布局子图为4×4)

figure
for i=1:16
    subplot(4,4,i), plot(dt{i}, temps{i}, '.-')
    xlabel('DateTime'), ylabel('Temp °C')
    datetick('x','HH:MM:SS')
end

screenshot

答案 1 :(得分:2)

您可以将时间字符串与sprintf合并,并使用datenum将它们转换为秒。然后其余的都很容易。以下是它的工作原理:

fid=fopen('data','r');
header=fgetl(fid);
data=textscan(fid,'%s','delimiter',';');
fclose(fid);
data=data{:};
day=data(1:3:end);
hour=data(2:3:end);
temp=str2double(data(3:3:end));
time=cellfun(@(x) sprintf('%s %s',day{strcmpi(hour,x)},x),hour,'uniformoutput',0);
% timev=datevec(time,'mm.dd.yyyy HH:MM:SS');
timen=datenum(time,'mm.dd.yyyy HH:MM:SS');
seconds=timen*86400;
plot(seconds-seconds(1),temp);

您可能需要查看日期格式,因为我不知道您使用的格式,所以我猜测它是mm.dd.yyyy HH:MM:SS(请参阅Matlab date specifiers