亲爱的所有人(提前多多感谢),
以下脚本无法在文件' master.py'中读取(并因此写入)%s字符。
我知道matlab认为%s是一个转义字符,所以也许可以选择修改终结符,但我发现这很难。
(编辑:忘了提及文件master.py不在我的控制范围内,所以我不能将文件修改为%% s)。
%matlab script
%===============
fileID = fopen('script.py','w');
yMax=5;
fprintf(fileID,'yOverallDim = %d\n', -1*yMax);
%READ IN "master.py" for rest of script
fileID2 = fopen('master.py','r');
currentLine = fgets(fileID2);
while ischar(currentLine)
fprintf(fileID,currentLine);
currentLine = fgets(fileID2);
end
fclose(fileID);
fclose(fileID2);
文件' master.py'看起来像这样(问题出在第6行' setName =" Set-%s"%(i + 1)':
i=0
for yPos in range (0,yOverallDim,yVoxelSize):
yCoordinate=yPos+(yVoxelSize/2) #
for xPos in range (0,xOverallDim,xVoxelSize):
xCoordinate=xPos+(xVoxelSize/2)
setName ="Set-%s"%(i+1)
p = mdb.models['Model-1'].parts['Part-1']
# p = mdb.models['Model-1'].parts['Part-2']
c = p.cells
cells = c.findAt(((xCoordinate, yCoordinate, 10.0), ))
region = p.Set(cells=cells, name=setName)
p.SectionAssignment(region=region, sectionName='Section-1', offset=0.0, offsetType=MIDDLE_SURFACE, offsetField='', thicknessAssignment=FROM_SECTION)
i+=1
答案 0 :(得分:1)
在documentation of fprintf
中,您会发现:
fprintf(fileID,formatSpec,A1,...,An)
按列顺序将formatSpec
应用于数组A1,...An
的所有元素,并将数据写入文本文件。
因此,在您的函数fprintf
中使用currentLine
作为格式规范,导致第6行的意外输出。通过提供fprintf
来正确应用formatSpec
,修复此问题问题,并不需要任何替换操作:
fprintf(fileID, '%s', currentLine);
答案 1 :(得分:0)
您的脚本可以正确阅读%
个字符。 "问题"是fprintf()
。此函数正确地将字符串中的百分号解释为格式化字符。因此,我认为您必须手动转义%
字符串中的每个currentLine
字符:
currentLine = strrep(currentLine, '%', '%%');
至少,当我在你的示例数据上检查它时,它起了作用。
答案 2 :(得分:0)
感谢applesoup识别我的基本疏忽 - 问题出在fprintf中 - 而不是在文件中读取
感谢序列提升fprintf