Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab \n在\t按预期工作时不工作_Matlab_Printf_Octave - Fatal编程技术网

Matlab \n在\t按预期工作时不工作

Matlab \n在\t按预期工作时不工作,matlab,printf,octave,Matlab,Printf,Octave,我有一个非常长的脚本,其中包含许多plot函数和相关的legend函数,但这些legend函数使用1、2、3或4来定位拐角处的图例(与旧版本一样)。但是现在我需要使用名称/值对来更改它们。为此,我写了一个脚本来转换它们。我想将代码复制到文本文件中,转换后的代码将位于另一个文本文件中,这样我就可以将其重新复制到我的.m文件中。这里是我的代码 fid=fopen('drawFigure.txt','r'); fid2=fopen('drawFigure2.txt','w'); codeLine=fg

我有一个非常长的脚本,其中包含许多
plot
函数和相关的
legend
函数,但这些
legend
函数使用1、2、3或4来定位拐角处的图例(与旧版本一样)。但是现在我需要使用名称/值对来更改它们。为此,我写了一个脚本来转换它们。我想将代码复制到文本文件中,转换后的代码将位于另一个文本文件中,这样我就可以将其重新复制到我的.m文件中。这里是我的代码

fid=fopen('drawFigure.txt','r');
fid2=fopen('drawFigure2.txt','w');
codeLine=fgetl(fid);
while(codeLine ~= -1)
  legAv=strfind(codeLine,'legend');
  if (~isempty(legAv))

    loc3=strfind(codeLine,'3');
    loc2=strfind(codeLine,'2');

    if(~isempty(loc3))
    loc=loc3;
    elseif(~isempty(loc2))
    loc=loc2;
    end
  %here I check the next indice of codeLine to make sure I will change location factor
    if(codeLine(loc+1)==')')
      codeLine(loc)=[];
      str1=codeLine(1:loc-1);
      str2=codeLine(loc:length(codeLine));
      mystr="'location','northeast'";
      codeLine=strcat(str1,mystr,str2);

    endif

  endif



  fprintf(fid2,'%s\n',codeLine);


  codeLine=fgetl(fid);

endwhile
 fclose(fid2);
 fclose(fid);`


在这段代码中,如果我写了
\t
,它会工作,但
\n
不工作。另外,他试图从一位软件工程师朋友那里获得帮助,但他无法找出原因。

根据您的信息,我猜您正在使用Windows记事本打开文件。如果是这种情况,除非前面有cariage返回(
\r
),否则不会显示换行符(
\n
)。这意味着您应该更改:

fprintf(fid2,'%s\n',codeLine);


或者,使用具有更多支持的基本文本编辑器,如Notepad++for Windows。

如果应用了正确的语言标记,“如何为示例代码着色”语法高亮显示将自动应用。您还可以显式地将语言名称添加到代码栏(三个反勾号)之后。顺便说一句,您看到的最可能的解释是您在Windows上,将文本写入二进制文件。试着用
“wt”
而不是
“w”
打开文件@CrisLuengo好的,我也会尝试一下,谢谢,你在代码中做了很多事情,对于倍频程来说,这些事情看起来很“奇怪”。例如,您不需要在
if
while
关键字后面的测试周围加括号(即,您可以只说
while codeLine~=1
if~isempty(legAv)
。此外,您可以说
代码行(loc:end)
而不是
代码行(loc:length(codeLine))
。此外,这不是一个自包含的示例,因此我无法判断您的
loc
变量是否要在其他地方定义;但如果不是,那么您的代码中存在逻辑错误。Obvs如果您的代码是一个独立的示例,我们可以自己调试,我们将能够更好地帮助您。此外,我忍不住感觉到XY问题的味道。Wh这正是你想要做的吗?你有没有一个你想要修改的脚本类型的玩具示例?我一定会尝试这个,让我在尝试时接受你的答案,并看到它起作用。我使用windows记事本。我不同意这个解决方案。正确的方法是打开文件,以文本模式编写,正如我在对的评论中所说的那样问题是。开放模式应该是
“wt”
,它将在任何平台上使用右换行符。
fprintf(fid2,'%s\r\n',codeLine);