命令提示符在运行软件以及生成报告和输出文件方面都运行良好。要生成包含所需结果的输出文件,我们必须运行使用参数文件的报告程序的可执行文件。例如,如果我要在命令提示符中实现这些步骤,它将是这样的:
“path\report.exe” –f Report.rwd –o Report.rwo
输出文件是Report.rwo,此文件将包含导出的变量。
现在要在Matlab中实现这个,下面是一个小脚本,给出了我想要实现的目标。它为每次运行调用软件并提取数据。
for nr=1:NREAL
dlmwrite(‘file.INC’,file(:,nr),’delimiter’,’\n’); % Writes the data file for each run
system('"path\file.dat"'); % calls software
system('"path\Report.rwd" –o "path\Report.rwo"'); % calls report
[a,b]=textread(‘"path\Report.rwo".rwo’,’%f\t%f’); % Reads the data and store it in the variable b
end
所以我有两个问题:
1)当我在Matlab中运行此脚本时,它不会生成输出文件Report.rwo。因此,当它由于缺少文件而到达包含'textread'函数的行时会出错。
2)每当Matlab调用报告(.rwd文件)时,它会提示我按Enter键或输入'q'退出。如果假设有数百个文件要运行,那么对于每个文件,我将被提示按Enter键继续。以下行导致提示:
system('"path\Report.rwd" –o "path\Report.rwo"'); % Calls report
OLDER EDIT:我的问题有2个更新,如下所示:
更新1:我的问题的第2部分似乎已被雅各解决了。一次运行正常。但是,只有当我能够运行整个程序并运行数百个文件时,才能确认最终结果。
更新2:我可以使用命令提示符运行软件并生成输出文件,如下所示:
**“path\mx200810.exe” –f file.dat**
此命令读取报告参数文件并生成输出文件:
“path \ report.exe”-f Report.rwd -o Report.rwo
最新编辑:
1)我能够运行软件,避免提示按下返回键并使用Matlab通过以下命令生成输出文件:
system('report.exe /f Report.rwd /o Report.rwo')
system('mx200810.exe -f file.dat')
但是,只有在我拥有.dat文件的同一文件夹中复制所需的.exe和.dll文件后,才能执行此操作。所以我通过我拥有所有这些文件的同一文件夹运行.m文件。
2)然而,在Matlab的命令窗口中仍有一个错误:
"...STOP: Unable to open the following file as data file:
'file.dat'
Check path name for spaces, special character or a total length greater than 256 characters
Cannot find data file named 'file.dat'
Date and Time of End of Run: .....
ans = 0"
答案 0 :(得分:2)
" .. "
中的字符串在MATLAB中无效,因此我不知道您的system
函数如何起作用。
将所有"
替换为'
,然后更新您的问题并在引号内包含命令行参数(例如-f file.dat
),如下所示:
%# Calls software
system('"path\mx200810.exe" –f file.dat');
%# Calls report
system('"path\report.exe" –f Report.rwd –o Report.rwo');
这是一个解决第二个问题的廉价技巧(键入q
来终止程序):
%# Calls software
system('"path\mx200810.exe" –f "path\file.dat" < "C:\inp.txt"');
%# Calls report
system('"path\report.exe" –f "path\Report.rwd" –o "path\Report.rwo" < "C:\inp.txt"');
C:\inp.txt
),其中包含字母q
,后跟返回字符。您可以通过打开记事本,输入q
,点击返回键并将其保存为C:\inp.txt
来创建此项。这将作为report.exe
似乎需要的“输入”。system
次调用,以便我们刚刚创建的文本文件中的输入通过管道输入。我已经包含了上面的修改过的调用(滚动到结尾以查看差异)。答案 1 :(得分:1)
使用两个输出来获取系统运行和文本结果的状态(如果有的话)。
cmd_line = '“path\report.exe” –f Report.rwd –o Report.rwo';
[status, result] = system(cmd_line);
根据status
变量继续使用您的脚本。如果它超过零则停止。
if (status)
error('Error running report.exe')
end
[a,b]=textread(...
如果您的参数是可变的,您可以使用字符串连接或SPRINTF函数在MATLAB中生成命令行字符串。