How should I write a code that can realize if a text file is updated and the code updates my plot too?

조회 수: 1 (최근 30일)
I have a log file which is keep updating a message (text file attached). This message can somehow be plotted and I have done that (see below) but I don't know how to update my plot when the txt file is updated with a new line?
logfile = uigetfile
opt = detectImportOptions(logfile,'FileType','text','Delimiter',','); % setting import options
opt.VariableNames = {'LogType','RealTimeStamp','DataSet','ParticleTimeStamp','ForcedParticleFlag','TriggerIntensity','Channel2','Channel3','Channel4','Channel5','Channel6','Channel7','Channel8','Channel9','Channel10','Channel11','Channel12','Channel13','Channel14','Channel15','Channel16','Channel17','Channel18','Channel19','Channel20','Channel21','Channel22','Channel23','Channel24','Channel25','Channel26','Channel27','Channel28','Channel29','Channel30','Channel31','Channel32'};
opt.ExtraColumnsRule ='ignore'; % remove extra column
ImportLog = readtable(logfile,opt); % import log file
ImportLog=ImportLog(~any(ismissing(ImportLog),2),:); % import only scattering data and remove other data
ChannelToAngle_T = PHIPS_ChannelToAngle(ImportLog); % channel to angle table
ForcedTrigger = ChannelToAngle_T.ForcedParticleFlag; % forced trigger out of table
idx0 = find(ForcedTrigger == 0); % index of those lines that has forced trigger or not
idx1 = find(ForcedTrigger == 1);
for i= 1:numel(idx0)
Angle = 18:8:170; % Angles
ASF = table2array(ChannelToAngle_T(idx0(end), end-19:end)); % Angular Scattering Function
semilogy(Angle, ASF, 's-','MarkerFaceColor', 'w', 'LineWidth', 2, 'MarkerSize', 10) % plot
hold on
%semilogy(angle, ASF_2, 's--','MarkerFaceColor', 'w', 'LineWidth', 2, 'MarkerSize', 10)
%semilogy(angle, ASF_3, 's--','MarkerFaceColor', 'w', 'LineWidth', 2, 'MarkerSize', 10)
hold off
grid on
xlabel ('Scattering Angle')
ylabel ('Scattering Intensity [cts]')
ylim([0, 5000])
ax = gca;
ax.YAxis(1).Color = 'k'; % change color of LHS y-axis to black
% ax.YAxis(2).Color = 'k'; % change color of RHS y-axis to black
ax.FontSize = 14;
ax.FontWeight = 'bold';
legend('Location', 'southeast')
%
end

채택된 답변

Image Analyst
Image Analyst 2021년 6월 26일
You could periodically check the date of the file with dir() (in a for loop or with a timer) and if the file date changed from the last time you checked it, update your plot.
  댓글 수: 8
Walter Roberson
Walter Roberson 2021년 6월 27일
how_long_to_wait = 5;
[logfile, logdir] = uigetfile;
if ~ischar(logfile); return; end %user cancel
logfile = fullfile(logdir, logfile);
opt = detectImportOptions(logfile,'FileType','text','Delimiter',','); % setting import options
opt.VariableNames = {'LogType','RealTimeStamp','DataSet','ParticleTimeStamp','ForcedParticleFlag','TriggerIntensity','Channel2','Channel3','Channel4','Channel5','Channel6','Channel7','Channel8','Channel9','Channel10','Channel11','Channel12','Channel13','Channel14','Channel15','Channel16','Channel17','Channel18','Channel19','Channel20','Channel21','Channel22','Channel23','Channel24','Channel25','Channel26','Channel27','Channel28','Channel29','Channel30','Channel31','Channel32'};
opt.ExtraColumnsRule ='ignore'; % remove extra column
ax = app.axes1;
cla(ax)
ax.YScale = 'log';
h = plot(nan, nan, 's-','MarkerFaceColor', 'w', 'LineWidth', 2, 'MarkerSize', 10);
oldsize = -inf;
while true
FileInfo = dir(logfile);
if FileInfo.bytes > oldsize
oldsize = FileInfo.bytes;
ImportLog = readtable(logfile,opt); % import log file
do some stuff
h.XData = Angles; h.YData = ASF;
drawnow();
else
pause(how_long_to_wait)
end
end
Image Analyst
Image Analyst 2021년 6월 27일
Does it always increase in size? If not then you could replace
if FileInfo.bytes > oldsize
with
if FileInfo.bytes ~= oldsize

댓글을 달려면 로그인하십시오.

추가 답변 (1개)

Sepehr Ariaei
Sepehr Ariaei 2021년 6월 28일
It always increase in size.
Thank you very much for your helps. It worked. @Image Analyst @Walter Roberson

카테고리

Help CenterFile Exchange에서 Data Import from MATLAB에 대해 자세히 알아보기

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by