在Matlab中实时显示Perl脚本的输出

时间:2012-01-05 19:35:24

标签: perl matlab

我有matlab函数调用Perl脚本,该脚本将大文本文件转换为二进制文件以便在Matlab中使用。有关Perl脚本的详细信息,请参阅此处:Parsing unsorted data from large fixed width text

我的Matlab功能看起来像这样

function convertMyData(dataFileName)

%Do some checks on the data
disp('Done Checking Stuff!');

%Process data file with Perl
perl('myPerlScript.pl',dataFileName)

% More Processing on the Binary output from Perl
disp('All Done!');

在perl脚本中有一些打印语句显示脚本的进度,因为转换可能需要几分钟。像这样:

while ($line = <INFILE>) {
    if ($lineCount % 100000 == 0){ #Display Progress every 100,000 lines
        print "On Line: ".$lineCount."\n";
    }
    #PROCESS LINE DATA HERE 
    $lineCount ++; 
} # END WHILE <INFILE>
print "Finished Reading: ".$lineCount." Lines\n";

问题在于,在Matlab中,我的所有“On Line:XXXXX”print语句都会在脚本完成时被转储到Matlab的默认ans变量,而不是像Matlab的{{ {1}}功能。

那么如何(如果可能的话)如何获得外部程序的输出以在Matlab运行时显示在Matlab上?

3 个答案:

答案 0 :(得分:2)

我认为你不能这样做。 MATLAB将控件传递给perl解释器,然后返回结果。

有一种解决方法对我有用。首先在perl脚本中添加 local $|=1; 以打开STDOUT autoflush。在输出到STDOUT之前。 (有关刷新缓冲区的更多详细信息,请参阅here。)然后使用system函数调用perl:

system(['"path_to_perl\perl.exe" test.pl ' dataFileName]);

如果perl解释器位于带空格的路径中,则双引号很重要。

答案 1 :(得分:1)

尝试使用内置的perl命令。它将运行perl解释器并返回结果。我认为您需要将输出放在名为result的变量中。

来自文档:

  

result = perl(...)返回尝试的Perl调用结果。

答案 2 :(得分:0)

我有类似的问题,goole引导我回答你的问题。

最后,在Windows上,我使用以下matlab代码,以解决我的问题。

cmdString = 'start /WAIT ';
cmdString = [cmdString 'C:\Strawberry\perl\bin\perl extract_tti_trace.pl "' fullname '"'];
dos(cmdString)