将新列添加到 matlab 上的文本文件
Adding new columns to a text file on matlab
我是 matlab 新手,需要一些帮助。我想重新使用 txt 文件中的三列并添加我创建的另外两列。
我的 .txt 文件是:
"Abel" 70 1.80 55 M
"Ana" 55 1.73 68 F
"Xavier" 65 1.82 61 M
"Rui" 80 1.79 23 M
这是我写的代码:
[nome,peso,altura,idade,genero]=textread('imc.txt','%q%n%f%n%c')
for k=1:length(peso)
imc(k)=peso(k)./(altura(k).^2)
end
for k=1:length(imc)
if imc(k)>24.9
imc_ok{k}='over'
elseif imc(k)<18.5
imc_ok{k}='under'
else
imc_ok{k}='ok'
end
end
imc=imc';
imc_ok=(imc_ok)';
fid=fopen('imc.txt','wt');
for i=1:length(imc)
fprintf(fid,'%q,%n,%f,%f,%s',nome(i,1),peso(i,1),altura(i,1),imc(i,1),imc_ok{i})
end
fclose(fid)
我想用 nome
、peso
、altura
、imc
和 imc_ok
创建一个新的文本文件,我试过搜索并将 (i,1)
替换为 {i}
但它没有用。
"Abel" 70 1.80 21.6 ok
"Ana" 55 1.73 18.3 under
"Xavier" 65 1.82 19.6 ok
"Rui" 80 1.79 23 24.9 over
导致 fprintf
失败的主要原因是格式说明符中的 %n
。在 matlab 中使用 %d
代替。
使用修改后的格式说明符稍微重写最后一个循环将产生所需的输出:
%% // write new file
fileout = 'imc_out.txt' ;
fid=fopen(fileout,'wt');
for i=1:length(imc)
fprintf(fid,'%s %d %3.2f %3.1f %s\n',nome{i},peso(i),altura(i),imc(i),imc_ok{i}) ;
end
fclose(fid)
我是 matlab 新手,需要一些帮助。我想重新使用 txt 文件中的三列并添加我创建的另外两列。
我的 .txt 文件是:
"Abel" 70 1.80 55 M
"Ana" 55 1.73 68 F
"Xavier" 65 1.82 61 M
"Rui" 80 1.79 23 M
这是我写的代码:
[nome,peso,altura,idade,genero]=textread('imc.txt','%q%n%f%n%c')
for k=1:length(peso)
imc(k)=peso(k)./(altura(k).^2)
end
for k=1:length(imc)
if imc(k)>24.9
imc_ok{k}='over'
elseif imc(k)<18.5
imc_ok{k}='under'
else
imc_ok{k}='ok'
end
end
imc=imc';
imc_ok=(imc_ok)';
fid=fopen('imc.txt','wt');
for i=1:length(imc)
fprintf(fid,'%q,%n,%f,%f,%s',nome(i,1),peso(i,1),altura(i,1),imc(i,1),imc_ok{i})
end
fclose(fid)
我想用 nome
、peso
、altura
、imc
和 imc_ok
创建一个新的文本文件,我试过搜索并将 (i,1)
替换为 {i}
但它没有用。
"Abel" 70 1.80 21.6 ok
"Ana" 55 1.73 18.3 under
"Xavier" 65 1.82 19.6 ok
"Rui" 80 1.79 23 24.9 over
导致 fprintf
失败的主要原因是格式说明符中的 %n
。在 matlab 中使用 %d
代替。
使用修改后的格式说明符稍微重写最后一个循环将产生所需的输出:
%% // write new file
fileout = 'imc_out.txt' ;
fid=fopen(fileout,'wt');
for i=1:length(imc)
fprintf(fid,'%s %d %3.2f %3.1f %s\n',nome{i},peso(i),altura(i),imc(i),imc_ok{i}) ;
end
fclose(fid)