八度-向字符串数组添加'\ n'不会创建新行

Ahm*_*vli 2 arrays string octave

我想将','字符更改为'\n'并将其保存到文本文件

所有文件都采用以下格式:

546,234,453,685,.....,234
Run Code Online (Sandbox Code Playgroud)

我想像这样:

546

234

453

685

...

234
Run Code Online (Sandbox Code Playgroud)

我对这个问题的开始是这样的:

fid=fopen(files{i});
strArr=fscanf(fid,'%s');

newstrArr=strrep(strArr,',','\n');

% Take each .txt input
for j=1:length(newstrArr)  
   Array=[Array newstrArr(j)];   
endfor
Run Code Online (Sandbox Code Playgroud)

让我逐步解释:

1我打开当前的文本文件

 fid=fopen(files{i});
Run Code Online (Sandbox Code Playgroud)

2我在文本文件中找到字符串

strArr=fscanf(fid,'%s');
Run Code Online (Sandbox Code Playgroud)

请注意,您不能将%s替换为%d。(如果我做错了,请纠正我)

第三我用换行符替换逗号

newstrArr=strrep(strArr,',','\n');
Run Code Online (Sandbox Code Playgroud)

第四我用for循环将每个字符添加到新数组中

for j=1:length(newstrArr)  
   Array=[Array newstrArr(j)];   
endfor
Run Code Online (Sandbox Code Playgroud)

但是,当我显示时,使用;

disp(Array);
Run Code Online (Sandbox Code Playgroud)

我有这个输出:

在此处输入图片说明

当我保存到文本文件时,我有相同的输出。

如何用换行符正确替换逗号?

Sue*_*ver 5

问题是您要插入文字'\n'(字符\n)而不是换行符。这是因为在Octave中,单引号括起来的字符串会忽略转义序列。如果希望Octave遵守转义序列,则可以使用双引号引起来的字符串,该字符串将转换\n为换行符。

strrep(strArr, ',', "\n");
Run Code Online (Sandbox Code Playgroud)

或者,如果您希望代码与MATLAB兼容,则可以改用char(10)(实际的换行符)。这是因为MATLAB没有双引号引起来的字符串。

output = strrep(strArr, ',', char(10));
Run Code Online (Sandbox Code Playgroud)

另一个选择是在处分割您的输入,,并用于sprintf添加换行符(它将被\n视为换行符)

values = strsplit(strArr, ',');
output = sprintf('%s\n', values{:});
Run Code Online (Sandbox Code Playgroud)

如果只想将每个条目保存到文件中的新行中,则可以fprintf改用。

values = strsplit(strArr, ',');
fout = fopen('output.txt', 'w');
fprintf(foug, '%s\n', values{:});
fclose(fout);
Run Code Online (Sandbox Code Playgroud)