2012-01-05 2 views
3

큰 텍스트 파일을 Matlab에서 사용할 수 있도록 변환하는 Perl 스크립트를 호출하는 matlab 함수가 있습니다. 펄 스크립트 자세한 내용은 여기를 참조하십시오 : Parsing unsorted data from large fixed width textPerl 스크립트의 출력을 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!'); 

그것을 변환하는 몇 분 정도 걸릴 수 있기 때문에 스크립트의 진행 상태를 보여주는 일부 인쇄 문처럼 뭔가를 보인다. 이런 식으로 뭔가가 : 스크립트 대신 실제로 matlab에의 disp() 같은 프롬프트에 표시의 완료되면 "XXXXX 라인에"print 문 그냥 matlab에의 기본 ans 변수로 덤프받을

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에 내 모든에 있다는 것입니다 기능.

그렇다면 외부 프로그램의 출력이 실행되는 동안 Matlab 프롬프트에 나타나게하려면 어떻게해야합니까?

답변

2

나는 당신이 그것을 할 수 있다고 생각하지 않습니다. MATLAB은 컨트롤을 perl 인터프리터에 전달한 다음 결과를 반환합니다.

나에게 효과가있는 한 가지 해결 방법이 있습니다. 먼저 성병 스크립트에 local $|=1;을 추가하여 STDOUT 자동 플러시를 켭니다. STDOUT으로 출력하기 전에. (예를 들어, 버퍼 플러싱에 대한 자세한 내용은 here를 참조하십시오.) 그런 다음 system 기능을 사용하여 펄 전화 : 당신의 펄 인터프리터가 공백이있는 경로에있는 경우

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

따옴표가 중요하다.

1

내장 된 perl 명령을 사용해보십시오. 펄 인터프리터를 실행하고 결과를 반환합니다. 출력을 result이라는 변수에 넣어야한다고 생각합니다. 문서에서

= 펄 (...)

결과는 시도 펄의 결과가 결과에 전화를 반환합니다.

0

나는 비슷한 문제가 있으며, goole이 질문에 이르게합니다.

마지막으로 Windows에서는 다음 MATLAB 코드를 사용하므로 문제를 해결하십시오.

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