Чтение и печать из текстовых файлов - PullRequest
1 голос
/ 22 сентября 2011

У меня есть некоторые проблемы с чтением данных из текстового файла и их построением. Текстовый файл содержит

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 ​​',' разделитель ','; ')

, чтобы получить

'17:08:00'
'21.81'

Но после этогоЯ не смог понять, как двигаться дальше, чтобы справиться с обеими этими цепочками, особенно со временем.Я хочу построить график зависимости температуры от времени на оси x, но не на этот раз за прошедшее время .. в данном случае 2 минуты 37 секунд.Требуется помощь

Спасибо Aabaz.Это действительно большое одолжение .. Я не знаю, почему я мог в этом разобраться ... Я потратил на это столько времени, что у меня есть около 50 файлов, содержащих эти данные ... Если я хочу выполнить циклэто под этим кодом, как это можно сделать, потому что у меня есть имена файлов в ПЗУ идентификаторов .. как 1AHJDDHUD1224.txt.Как передать имена файлов в цикле. Мне нужно изменить имена файлов, а затем передать их в цикле. Я знаю, что у меня есть еще один вопрос: если я хотел, чтобы значения отображались послекаждые 60 секунд ... так же, как только данные становятся доступны в текстовых файлах, строится график, а затем график обновляется через каждые 60 секунд, пока в текстовом файле не появятся дополнительные значения

Ответы [ 2 ]

4 голосов
/ 23 сентября 2011

Рассмотрим следующий код. Он будет циклически перебирать все файлы .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

2 голосов
/ 22 сентября 2011

Вы можете объединить строки времени с 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спецификаторы )

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...