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)
我有这个输出:
当我保存到文本文件时,我有相同的输出。
如何用换行符正确替换逗号?
问题是您要插入文字'\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)