2014-10-08 57 views
1

我在MATLAB中編寫了一個函數(我的第一,所以不要太快判斷),它應該根據3個輸入參數編寫批處理文件:使用fprintf或sprintf時的值不同

write_BatchFile(setup,engine,np)

這裏設置由一個或多個串,發動機僅由一個串和NP的是一個數,例如:

setup = {'test1.run';'test2.run';'test3.run'}; 
engine = 'Engine.exe'; 
np  = 4; % number of processors/cores 

我會放棄我的腳本的第一部分,這是一個更廣泛的,但在必要的情況下,我可以提供後面的整個腳本。總之,一旦所有3個參數已經確定,它成功地做,我寫了下面的,這是我的腳本的最後一部分:

%========================================================================== 
% Start writing the batch file 
%========================================================================== 

tmpstr = sprintf('\nWriting batch file batchRunMPI.bat...'); 
disp(tmpstr); clear tmpstr; 
filename = 'batchRunMPI.bat'; 
fid  = fopen(filename,'w'); 

fprintf(fid,'set OMP_NUM_THREADS=1\n'); 
for i = 1:length(setup); 
    fprintf(fid,'mpiexec -n %d -localonly "%s" "%s"\n',np,engine,setup{i}); 
    fprintf(fid,'move %s.log %s.MPI_%d.log\n',setupname{i},setupname{i},np); 
end 
fclose all; 
disp('Done!'); 

注意setupname如下使用fileparts

[~,setupname,setupext] = fileparts(setup); 

然而,在看的時候導致批處理文件,我最終得到的值52,我表明我的核心數量(= 4),例如:

mpiexec -n 52 -localonly "Engine.exe" "test1.run" 
mpiexec -n 52 -localonly "Engine.exe" "test2.run" 
mpiexec -n 52 -localonly "Engine.exe" "test3.run" 

相反,我會希望得到的結果是:

mpiexec -n 4 -localonly "Engine.exe" "test3.run", etc 

當我檢查np的價值它返回,所以我很困惑這個52從哪裏來。

我的感覺是,這是一個非常簡單的解決方案,我只是沒有意識到,但迄今爲止我還沒有找到任何東西,這就是我在這裏發佈的原因。所有幫助表示讚賞!

-Daniel

回答

0

看來,在某個階段np被轉換爲字符串。字符'4'具有整數值52,它解釋了您所得到的結果。你有幾個選擇:

一)找出在np被轉換爲字符串,並改變它

二)%d%s,所以你得到的'4'代替52

c)將printf聲明的np部分更改爲str2double(np)

+0

謝謝你這麼快的回覆!您對轉換爲字符串是正確的,並且使用您的建議(str2double)對其進行更改使其可以正常工作。 所以我爲這樣一個簡單的答案寫了如此廣泛的帖子。 再次感謝! – Daniel 2014-10-08 02:00:11