【问题标题】:Adding new columns to a text file on matlab在 matlab 上将新列添加到文本文件
【发布时间】:2015-01-06 01:18:35
【问题描述】:

我是 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)

我想用nomepesoalturaimcimc_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

【问题讨论】:

  • 能否更新您的问题,并举例说明您希望新文本文件的外观。额外的行是什么?你打算如何添加它们?你如何调用你的函数?
  • 另外,你不应该调用你的函数textread,因为这是一个内置的Matlab函数。
  • 我实际上是在使用 textread 读取 .txt 文件,我没有创建函数。我已经编辑了我的问题,谢谢
  • 所以您实际上想要替换最后 2 个 ,而不是 。也许你应该编辑你的标题以反映这一点,因为在你编辑之前它相当混乱。
  • 哦,你是对的,对不起!

标签: matlab


【解决方案1】:

导致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)

【讨论】:

  • 它有效,谢谢!我不太明白为什么要使用 %3.2f,%f 不会自动将其转换为正确的小数位数吗?
  • %f 可以很好地将十进制数字转换为字符串,但它们的数字太多而难以阅读。根据您的示例,我使用 %3.2 在昏迷后只有 2 位数字。查看有关 format specifiers 的 Matlab 文档,他们解释了其中的细微之处。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多