开发者

Reading and Plotting from text files

I have some problems in reading data from text file and plotting it.The text file contains

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

I want to plot the Temperature values with elapsed minutes. firstly i used

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

to read the data in a string and I get

'17:09:16;21.75'

After that I used

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

to get

'17:08:00'
'21.81'

But after this I am not been able to figure out how to move forward to deal with both these st开发者_开发技巧rings, especially time. I want to plot temperature with time on xaxis..but not this time the elapsed time..in this case 2 mins 37 secs. Help needed

Thanks Aabaz.thats really a big favor..I dun why I could figure it out ..I spent so much time on it I have some 50 files comprising this data..If i want to loop it under this code , how can accomplish it, cz i have names of the file under ROM IDs..alike 1AHJDDHUD1224.txt. How wud pass the file names in the loop.Do I have to change the names of the files then pass them under loop.I dun knw

I have one more question that if I wanted the values to be plotted after every 60 seconds..alike as soon the data is available in text files graph is plotted , and then graph is updated after every 60 sec until some more values are available in text file


Consider the following code. It will cycle through all .DAT files in a specific directory, read the data files, then plots with a the x-axis formatted as date/time:

%# 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

Now we can plot the data (say we had 16 files, thus layout subplots as 4-by-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

Reading and Plotting from text files


You can merge the time strings with sprintf and translate them to seconds with datenum. Then the rest will be easy. Here is how it could work:

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);

You may want to check the date format as I did not know which format you were using, so I guessed it was mm.dd.yyyy HH:MM:SS (see Matlab date specifiers)

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜