我有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上?
答案 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)