Octave - 将“\n”添加到字符串数组并不是创建新行

Octave - Adding '\n' to String Array is Not Creating a New Line

我想把','字符改成'\n'并保存到文本文件

所有文件都是这种格式:

546,234,453,685,.....,234

我想把它变成这样:

546

234

453

685

...

234

这个问题我的启蒙是这样的:

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

让我一步步解释:

1st 我打开当前的文本文件

 fid=fopen(files{i});

第二次我在文本文件中找到字符串

strArr=fscanf(fid,'%s');

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

第三次我用换行符替换逗号

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

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

for j=1:length(newstrArr)  
   Array=[Array newstrArr(j)];   
endfor

但是当我显示时,使用;

disp(Array);

我有这个output

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

此致

问题是您插入的是文字 '\n'(字符 \n)而不是换行符。这是因为在 Octave 中,a single-quote enclosed string ignores escape sequences。如果您希望 Octave 尊重转义序列,您可以使用双引号字符串将 \n 转换为换行符。

strrep(strArr, ',', "\n");

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

output = strrep(strArr, ',', char(10));

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

values = strsplit(strArr, ',');
output = sprintf('%s\n', values{:});

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

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

如果您真的只想用换行符替换“,”,只需执行

in = fileread ("yourfile");
out = strrep (in, ",", "\n")
out = 546
234
453
685
234

顺便说一句,看看“\n”(在 GNU Octave 中是一个换行符)和“\n”(字面上的 \n)之间的区别

另一种选择是使用regexprep(),这具有与 MATLAB 兼容的优点。假设你想要的换行约定是\n,那么

regexprep('123,456,789',',','\n')

ans = 123
456
789

当通过 fprintf() 输出到文件时,结果类似于

123
456
789

前提是文本编辑器理解换行约定。