从Matlab调用一个软件

从Matlab调用一个软件,matlab,system,command-prompt,Matlab,System,Command Prompt,命令提示符在运行软件以及生成报告和输出文件的各个方面都能很好地工作。要生成包含所需结果的输出文件,我们必须运行使用参数文件的报告程序的可执行文件。例如,如果我要在命令提示符中实现这些步骤,它将如下所示: “path\report.exe” –f Report.rwd –o Report.rwo 输出文件为Report.rwo,该文件将包含导出的变量 现在,为了在Matlab中实现这一点,下面是一个小脚本,给出了我试图实现的要点。它为每次运行调用软件并提取数据 for nr=1:NREAL

命令提示符在运行软件以及生成报告和输出文件的各个方面都能很好地工作。要生成包含所需结果的输出文件,我们必须运行使用参数文件的报告程序的可执行文件。例如,如果我要在命令提示符中实现这些步骤,它将如下所示:

“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
旧版编辑:我的问题有两个更新,如下所示:

**“path\mx200810.exe” –f file.dat**
更新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')
但是,只有在将所需的.exe和.dll文件复制到.dat文件所在的文件夹中后,我才能执行此操作。因此,我在同一个文件夹中运行.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"
“中包含的字符串在MATLAB中无效,因此我不知道您的
系统
函数如何工作

将所有
替换为
,然后更新您的问题,并在引号内包含命令行参数(例如
-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
终止程序):

%#调用软件
系统(“'path\mx200810.exe”–f“path\file.dat”<“C:\inp.txt”);
%#呼叫报告
系统(“'path\report.exe”–f“path\report.rwd”–o“path\report.rwo”<“C:\inp.txt”);
  • 创建一个文件(例如
    C:\inp.txt
    ),其中包含字母
    q
    ,后跟返回字符。您可以通过打开记事本,键入
    q
    ,点击返回键并将其保存为
    C:\inp.txt
    。这将用作似乎需要的“输入”
    report.exe
  • 更改代码中的所有
    系统
    调用,以便将我们刚才输入的文本文件通过管道传输到其中。我已经包含了上面修改的调用(滚动到末尾以查看差异)
  • 包含在
    ”中的字符串。。“
    在MATLAB中无效,因此我不知道您的
    系统
    函数如何工作

    将所有
    替换为
    ,然后更新您的问题,并在引号内包含命令行参数(例如
    -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
    终止程序):

    %#调用软件
    系统(“'path\mx200810.exe”–f“path\file.dat”<“C:\inp.txt”);
    %#呼叫报告
    系统(“'path\report.exe”–f“path\report.rwd”–o“path\report.rwo”<“C:\inp.txt”);
    
  • 创建一个文件(例如
    C:\inp.txt
    ),其中包含字母
    q
    ,后跟返回字符。您可以通过打开记事本,键入
    q
    ,点击返回键并将其保存为
    C:\inp.txt
    来创建此文件。这将用作似乎需要的“输入”
    report.exe
  • 更改代码中的所有
    系统
    调用,以便我们刚才输入的文本文件通过管道传输到其中。我已经包括了上面修改过的调用(滚动到末尾查看差异)

  • 使用两个输出获取系统运行状态和文本结果(如果有)

    cmd_line = '“path\report.exe” –f Report.rwd –o Report.rwo';
    [status, result] = system(cmd_line);
    
    根据
    状态
    变量继续脚本。如果超过零就停止

    if (status)
        error('Error running report.exe')
    end
    [a,b]=textread(...
    

    如果您的参数是可变的,您可以使用字符串连接或函数在MATLAB中生成命令行字符串。

    使用两个输出来获取系统运行状态和文本结果(如果有)

    cmd_line = '“path\report.exe” –f Report.rwd –o Report.rwo';
    [status, result] = system(cmd_line);
    
    根据
    状态
    变量继续脚本。如果超过零就停止

    if (status)
        error('Error running report.exe')
    end
    [a,b]=textread(...
    

    如果您的参数是可变的,您可以使用字符串连接或函数在MATLAB中生成命令行字符串。

    我提供了一个可能解决第二个问题的“技巧”
    “C:\Program Files\CMG\IMEX\2008.10\Win32\EXE\mx200810.EXE”
    “C:\Program Files\CMG\BR\2008.10\Win32\EXE\report.EXE”
    是否正确?是否在
    中也包含了
    inp.txt
    的新路径?但由于已将路径更改为带有空格的路径,请将其包含在内。例如,
    “C:\Users\Harpreet-Harpreet\Desktop\inp.txt”
    “C:\Users\Harpreet-Harpreet\Desktop\inp.txt”就是一个例子。您应该在桌面上将其替换为
    inp.txt
    的完整路径。这可以通过右键单击文件并查看其