找回密码
 注册
Simdroid-非首页
查看: 68|回复: 6

保存为txt文件为什么总是只有一列,原数组是两列

[复制链接]
发表于 2012-8-27 21:31:50 | 显示全部楼层 |阅读模式 来自 上海
悬赏2仿真币已解决
本帖最后由 liuyang5299 于 2012-8-27 21:33 编辑

我用的是这个命令
原数组是8200*2,
for i=1:2:144    Tmp=C(:,i:i+1);
    str= ['f1 - 副本 (' num2str((i+1)/2) ').txt'];
fid=fopen(str,'w');
fprintf(fid,'\%6.4f\n ',Tmp);
fclose(fid);
end
我怀疑是fprintf用法的问题,请问正确的是怎么样的?

最佳答案

查看完整内容

你这个C是8200*2还是2*8200? 如果是8200*2的话,Tmp = C(:,i:i+1)这里会越界吧下面我假设你这个C是2*8200,你应该把:改成:
发表于 2012-8-27 21:31:51 | 显示全部楼层 来自 江苏南京
Simdroid开发平台
你这个C是8200*2还是2*8200?
如果是8200*2的话,Tmp = C(:,i:i+1)这里会越界吧
  1. >> C = zeros(8200,2);
  2. >> C(:,3:4)
  3. Index exceeds matrix dimensions.
复制代码
下面我假设你这个C是2*8200,你应该把:
  1. fprintf(fid,'\%6.4f\n ',Tmp);
复制代码
改成:
  1. fprintf(fid,'%6.4f,%6.4f\n ',Tmp);
复制代码

评分

1

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2012-8-28 10:30:29 | 显示全部楼层 来自 上海
ithinksoim 发表于 2012-8-28 07:51
你这个C是8200*2还是2*8200?
如果是8200*2的话,Tmp = C(:,i:i+1)这里会越界吧下面我假设你这个C是2*8200 ...

那么C是8200*2呢
回复

使用道具 举报

发表于 2012-8-28 10:51:40 | 显示全部楼层 来自 江苏南京
本帖最后由 ithinksoim 于 2012-8-28 10:52 编辑
liuyang5299 发表于 2012-8-28 10:30
那么C是8200*2呢

那就还得把Tmp=C(:,i:i+1);改成
  1. Tmp=C(i:i+1,:);
复制代码
回复

使用道具 举报

 楼主| 发表于 2012-8-28 16:58:58 | 显示全部楼层 来自 上海
ithinksoim 发表于 2012-8-28 10:51
那就还得把Tmp=C(:,i:i+1);改成

假如 我想保存为txt为两列,原数组为8200*4.保存为两个txt文件,每一个是8200*2

for i=1:2
    Tmp=C(:,i:i+1);
    str= ['f1 - 副本 (' num2str(i) ').txt'];
fid=fopen(str,'w');
fprintf(fid,'\%6.4f\n ',Tmp);
fclose(fid);
end
不对吗?
回复

使用道具 举报

发表于 2012-8-28 19:15:03 | 显示全部楼层 来自 江苏南京
liuyang5299 发表于 2012-8-28 16:58
假如 我想保存为txt为两列,原数组为8200*4.保存为两个txt文件,每一个是8200*2

for i=1:2

不对,你要注意,多少列取决于你这个Tmp里有多少列,而是取决于
  1. fprintf(fid,'%6.4f\n ',Tmp)
复制代码
的格式化字符串%6.4f\n里面有多少个元素。所以你应该写成:
  1. fprintf(fid,'%6.4f,%6.4f\n ',Tmp)
复制代码

评分

1

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2012-8-29 15:11:40 | 显示全部楼层 来自 上海
lovebaby 发表于 2012-8-28 19:15
不对,你要注意,多少列不取决于你这个Tmp里有多少列,而是取决于的格式化字符串%6.4f\n里面有多少个元素 ...

比如说temp是
1 2  3
4 5  6
fprintf(fid,'%6.4f,%6.4f\n ',Tmp)
输出的原则是什么
我之前试了一下
比如我的数组为8200*214,保存为72个txt文件,每一个文件为8200*3,其中文件第2列均为逗号,对应数值代码为44,如何循环保存为逗号,我的程序为
C=zeros(8200,216);
for i=1:3:214
    Tmp=C(i:i+2,:);
    str= ['f1 - 副本 (' num2str((i-1)/3+1) ').dbs'];
fid=fopen(str,'w');
fprintf(fid,'%f %s %f\n ',Tmp);
fclose(fid);
end
发现有些文件的数据很混乱
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-4-19 13:11 , Processed in 0.040498 second(s), 15 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表