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
前提是文本编辑器理解换行约定。
我想把','
字符改成'\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
前提是文本编辑器理解换行约定。