声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 4552|回复: 16

[编程技巧] 如何把一个数组转成可读TXT文档输出?

[复制链接]
发表于 2010-4-19 21:50 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
如何把一个数组转成可读TXT文档输出?该数组nx=493; ny=87;nz=147的三维数组,正整数。
要输出格式:x y z k k k (其中k为对应X,Y,Z坐标下的值,即输出下数组l,每输出一行回车)
for c=1:nz, for b=1:ny, for a=1:nx
   k=human3d(a,b,c); l=[a,b,c,k,k,k];
end; end; end

谢谢各位大侠指教!!小弟初学MATLAB。求指点!谢谢啦~~

[ 本帖最后由 ChaChing 于 2010-4-21 14:16 编辑 ]
回复
分享到:

使用道具 举报

发表于 2010-4-20 00:23 | 显示全部楼层
help fprintf
 楼主| 发表于 2010-4-20 10:00 | 显示全部楼层
我这样写,但是显示有错误。。。。
load F:\human3d.mat; FID=fopen(human3d.txt','w');
for c=1:nz, for b=1:ny, for a=1:nx
   k=human3d(a,b,c); l=[a,b,c,k,k,k];
   fprintf(FID,'%g',l); fprintf(FID,'\n')
end; end; end
fclose(FID);
end
save F:\human3d.txt

[ 本帖最后由 ChaChing 于 2010-4-21 14:18 编辑 ]
发表于 2010-4-20 11:35 | 显示全部楼层
求助完整格式:出错代码和出错提示:@)
 楼主| 发表于 2010-4-20 12:19 | 显示全部楼层
显示:??? Attempt to reference field of non-structure array.
求指教!谢谢!
发表于 2010-4-20 20:13 | 显示全部楼层

回复 地板 ChaChing 的帖子

fprintf(fid,'%f  %f  %f  %f  %f  %f ',I)?

[ 本帖最后由 dreamstone 于 2010-4-20 22:11 编辑 ]
发表于 2010-4-20 21:36 | 显示全部楼层

回复 5楼 xiaofei314 的帖子

记住个人水平专业有限! 没原始数据, 没给齐出错信息,如何测试怎知道哪里出问题了? :loveliness:
完整的出错信息应该类似是这样吧!
??? Attempt to reference field of non-structure array.
Error in ==> zzz at 2
FID=fopen(human3d.txt','w');
没原始数据, 自造一个, 注意红色部分! (空格& ')

nz=5; ny=5; nx=5; human3d=rand(5,5,5);
FID=fopen('human3d.txt','w');
for c=1:nz, for b=1:ny, for a=1:nx
  k=human3d(a,b,c); l=[a,b,c,k,k,k];
  fprintf(FID,'%g ',l); fprintf(FID,'\n');
%fprintf(FID,'%f  %f  %f  %f  %f  %f\n ',l); % the smae
end; end; end
fclose(FID);

[ 本帖最后由 ChaChing 于 2010-4-20 21:41 编辑 ]

评分

1

查看全部评分

发表于 2010-4-20 21:40 | 显示全部楼层

回复 6楼 dreamstone 的帖子

小错误!? fprint => fprintf
发表于 2010-4-20 22:12 | 显示全部楼层

回复 8楼 ChaChing 的帖子

汗,多谢,险些误人子弟
 楼主| 发表于 2010-4-21 11:16 | 显示全部楼层
谢谢楼上各位指点!!!我改改看!
少了一个分号。。添上之后能运行了,但是输出的TXT文件乱码。。怎么会这样呢?

fid=fopen('F:\MAN_TISSUE3-6.dat','r'); human_lin=fread(fid,'uint8'); fclose(fid);
nx=493; ny=87; nz=147; human3d=zeros(nx,ny,nz); i=1;
for z=1:nz, for y=1:ny, for x=1:nx
   human3d(x,y,z)=human_lin(i); i=i+1;
end; end; end
save F:\human3d.mat; load F:\human3d.mat
SZ1=[0 1 2 9 10 11 12 13 14 17 18 20 31 77 94 95 96 97 110 4 6 7 8 30];
for c=1:nz, for b=1:ny, for a=1:nx
   if(~length(find(SZ1==human3d(a,b,c))))
   human3d(a,b,c)=120;
   end
end; end; end
for c=1:nz, for b=1:ny, for a=1:nx
   if human3d(a,b,c)==2, human3d(a,b,c)=15; end
end; end; end
for c=1:nz, for b=1:ny, for a=1:nx
   if (human3d(a,b,c)==1), human3d(a,b,c)=2; end
   if (human3d(a,b,c)==4||human3d(a,b,c)==6||human3d(a,b,c)==7||human3d(a,b,c)==8||human3d(a,b,c)==30)
      human3d(a,b,c)=3; end
   if (human3d(a,b,c)==9), human3d(a,b,c)=4; end
   if (human3d(a,b,c)==10), human3d(a,b,c)=5; end
   if (human3d(a,b,c)==11), human3d(a,b,c)=6; end
   if (human3d(a,b,c)==12), human3d(a,b,c)=7; end
   if (human3d(a,b,c)==13), human3d(a,b,c)=8; end
end; end; end
for c=1:nz, for b=1:ny, for a=1:nx
   if (human3d(a,b,c)==14), human3d(a,b,c)=9; end
   if (human3d(a,b,c)==17), human3d(a,b,c)=10; end
   if (human3d(a,b,c)==18), human3d(a,b,c)=11; end
   if (human3d(a,b,c)==20), human3d(a,b,c)=12; end
   if (human3d(a,b,c)==31), human3d(a,b,c)=13; end
end; end; end
for c=1:nz, for b=1:ny, for a=1:nx
   if (human3d(a,b,c)==77), human3d(a,b,c)=14; end
   if (human3d(a,b,c)==94), human3d(a,b,c)=16; end
   if (human3d(a,b,c)==95), human3d(a,b,c)=16; end
   if (human3d(a,b,c)==96), human3d(a,b,c)=16; end
   if (human3d(a,b,c)==97), human3d(a,b,c)=16; end
   if (human3d(a,b,c)==110), human3d(a,b,c)=17; end
end; end; end
save F:\human3d.mat ; load F:\human3d.mat
FID=fopen('human3d.txt','w');
for c=1:nz, for b=1:ny, for a=1:nx
   k=human3d(a,b,c); l=[a,b,c,k,k,k]; fprintf(FID,'%f %f %f %f %f %f\n',l);
end; end; end
fclose(FID); save F:\human3d.txt

上面是完整程序。
任务是:读取一个DAT文件,然后修改数组的值,最后输出txt
求指教!不知道哪错了,输出的TXT是乱码
在输出前,输入human3d(20,20,20)等还能显示正整数,用DISP显示也能符合要求,为什么输出TXT就乱码了呢?

[ 本帖最后由 ChaChing 于 2010-4-21 14:13 编辑 ]
发表于 2010-4-21 13:07 | 显示全部楼层
save('d:\mymfiles\wenjian','bianliang','-ASCII')

'-ASCII'  这个参数就可以了
发表于 2010-4-21 13:29 | 显示全部楼层
都已经使用fprintf了, 干嘛还save F:\human3d.txt ???
请详细比较3/7F的差异! 或许7F还应该提醒下:loveliness:

还有请善用编辑功能!:@)

[ 本帖最后由 ChaChing 于 2010-4-21 13:40 编辑 ]
 楼主| 发表于 2010-4-21 13:39 | 显示全部楼层
还是不懂啊。。。
发表于 2010-4-21 13:59 | 显示全部楼层
fprintf  是在运行过程中,一点一点保存数据。比较灵活,可以加入文字、格式等等

而如果你有一个完整的矩阵 A=rand(100,100)

save('d:\mymfiles\wenjian',A,'-ASCII')  , 即可直接保存,是一种比较懒,也比较方便的做法,但是不能对数据格式做任何处理
发表于 2010-4-21 14:04 | 显示全部楼层
FID=fopen('d:\test.txt','w');
a = 8;
fprintf(FID,'%d\n', a); fprintf(FID,'\n');
fprintf(FID,'%d\n', a); fclose(FID);

为什么 输出结果是:
88
而不是
8
8

\n 没有起到换行的作用?

[ 本帖最后由 ChaChing 于 2010-4-21 14:39 编辑 ]
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-6-16 18:26 , Processed in 0.057126 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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