matlab文本读写%s字符(无需转义)

时间:2016-09-01 07:37:24

标签: matlab

亲爱的所有人(提前多多感谢),

以下脚本无法在文件' 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

3 个答案:

答案 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