Matlab 使用fprintf或sprintf时的不同值
我在MATLAB中编写了一个函数(我的第一个,所以不要太快下结论),它应该基于3个输入参数编写一个批处理文件:Matlab 使用fprintf或sprintf时的不同值,matlab,function,printf,Matlab,Function,Printf,我在MATLAB中编写了一个函数(我的第一个,所以不要太快下结论),它应该基于3个输入参数编写一个批处理文件: 写入批处理文件(设置、引擎、np) 此处,setup由一个或多个字符串组成,engine仅由一个字符串组成,np是一个数字,例如: setup = {'test1.run';'test2.run';'test3.run'}; engine = 'Engine.exe'; np = 4; % number of processors/cores 我将省略脚本的第一部分,这部分
写入批处理文件(设置、引擎、np)
此处,setup由一个或多个字符串组成,engine仅由一个字符串组成,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,setupext] = fileparts(setup);
然而当查看生成的批处理文件时,我最终得到了值52,其中我指示了我的核心数(=4),例如:
相反,我希望结果是:
mpiexec -n 4 -localonly "Engine.exe" "test3.run", etc
当我检查np的值时,它返回4,所以我不知道这52是从哪里来的
我的感觉是,这是一个非常简单的解决方案,我只是不知道,但我还没有找到任何关于这一点,这就是为什么我在这里张贴。感谢您的帮助
-Daniel似乎在某个阶段,
np
正在转换为字符串。字符'4'
具有整数值52
,这解释了您得到的结果。您有几个选择:
a) 找出将np
转换为字符串的位置并对其进行更改
b) 将%d
转换为%s
,因此您得到的是'4'
而不是52
c) 将
printf
语句的np
部分更改为str2double(np)
谢谢您如此快速的回复!关于转换为字符串,您是对的,使用您的建议(str2double)对其进行更改可以使其正常工作。所以我写了一篇内容如此广泛的文章来获得如此简单的答案。再次感谢!
mpiexec -n 4 -localonly "Engine.exe" "test3.run", etc