暂停 MATLAB 脚本,直到在目录中生成文件
Pausing MATLAB script until file is generated in directory
我编写了一个执行以下操作的脚本:首先它将文本文件写入指定目录,然后通过 PowerShell 命令为 Post 处理器调用此文本文件,我也在 MATLAB 中调用该命令为了生成结果 *.csv 文件。最后,脚本会在这个生成的 *.csv 文件中格式化数据并绘制结果。
问题是脚本只能在给定文件放入目录后才能继续 - 特别是在 *.csv 文件的情况下,这可能需要 10-15 秒。目前我只是加了一种提示用户等待的断点,如下:
fprintf("Check if *.csv is present in directory - then click 'Continue' \n")
keyboard;
我猜有更好的方法来做到这一点 - 理想情况下 运行 脚本,在给定点自动等待,直到目录中出现指定文件,然后继续 运行宁代码。
如何自动检查 *.csv 文件是否存在?
您可以使用 exist()
。此函数检查变量、函数、文件、文件夹等是否存在。将其放在 if
语句中应该可以解决问题:
if exist('your_file.csv')
% Run your code
end
您可以使用 isfile
(post R2017b) 检查文件 filename
是否存在,如下所示:
if isfile(filename)
% File exists.
else
% File does not exist.
end
R2017b 之前你可以使用 if exist(filename, 'file') == 2
.
您可以通过以下方式将其与循环结合起来:
t_Start = tic; % Start stopwatch timer (to set a maximum time)
dt = 2; % Check every dt seconds (example dt = 2)
while isfile(filename) == false && toc(t_Start) < 60 % maximum 60 seconds
pause(dt);
time_counter = time_counter + dt;
end
% Continue with your code here.
我正在使用 while lopp 检查文件是否存在,并在每次检查之间等待 2 秒。没有理由每毫秒检查一次,除非你很着急。你当然可以改变这个。
t_Start = tic;
和 toc(t_start) < 60
是在 60 秒后停止循环的秒表。仅使用 tic
和 toc < 60
也可以,但这会在循环外重置 tic/toc
调用,如果有的话。
请注意 isfile(filename) == false
与 ~isfile(filename)
相同,但对于初学者来说更容易阅读。
我编写了一个执行以下操作的脚本:首先它将文本文件写入指定目录,然后通过 PowerShell 命令为 Post 处理器调用此文本文件,我也在 MATLAB 中调用该命令为了生成结果 *.csv 文件。最后,脚本会在这个生成的 *.csv 文件中格式化数据并绘制结果。
问题是脚本只能在给定文件放入目录后才能继续 - 特别是在 *.csv 文件的情况下,这可能需要 10-15 秒。目前我只是加了一种提示用户等待的断点,如下:
fprintf("Check if *.csv is present in directory - then click 'Continue' \n")
keyboard;
我猜有更好的方法来做到这一点 - 理想情况下 运行 脚本,在给定点自动等待,直到目录中出现指定文件,然后继续 运行宁代码。
如何自动检查 *.csv 文件是否存在?
您可以使用 exist()
。此函数检查变量、函数、文件、文件夹等是否存在。将其放在 if
语句中应该可以解决问题:
if exist('your_file.csv')
% Run your code
end
您可以使用 isfile
(post R2017b) 检查文件 filename
是否存在,如下所示:
if isfile(filename)
% File exists.
else
% File does not exist.
end
R2017b 之前你可以使用 if exist(filename, 'file') == 2
.
您可以通过以下方式将其与循环结合起来:
t_Start = tic; % Start stopwatch timer (to set a maximum time)
dt = 2; % Check every dt seconds (example dt = 2)
while isfile(filename) == false && toc(t_Start) < 60 % maximum 60 seconds
pause(dt);
time_counter = time_counter + dt;
end
% Continue with your code here.
我正在使用 while lopp 检查文件是否存在,并在每次检查之间等待 2 秒。没有理由每毫秒检查一次,除非你很着急。你当然可以改变这个。
t_Start = tic;
和 toc(t_start) < 60
是在 60 秒后停止循环的秒表。仅使用 tic
和 toc < 60
也可以,但这会在循环外重置 tic/toc
调用,如果有的话。
请注意 isfile(filename) == false
与 ~isfile(filename)
相同,但对于初学者来说更容易阅读。