xiaofei314 发表于 2010-4-19 21:50

如何把一个数组转成可读TXT文档输出?

如何把一个数组转成可读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=;
end; end; end

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

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

ChaChing 发表于 2010-4-20 00:23

help fprintf

xiaofei314 发表于 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=;
   fprintf(FID,'%g',l); fprintf(FID,'\n')
end; end; end
fclose(FID);
end
save F:\human3d.txt

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

ChaChing 发表于 2010-4-20 11:35

求助完整格式:出错代码和出错提示:@)

xiaofei314 发表于 2010-4-20 12:19

显示:??? Attempt to reference field of non-structure array.
求指教!谢谢!

dreamstone 发表于 2010-4-20 20:13

回复 地板 ChaChing 的帖子

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

[ 本帖最后由 dreamstone 于 2010-4-20 22:11 编辑 ]

ChaChing 发表于 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=;
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 编辑 ]

ChaChing 发表于 2010-4-20 21:40

回复 6楼 dreamstone 的帖子

小错误!? fprint => fprintf

dreamstone 发表于 2010-4-20 22:12

回复 8楼 ChaChing 的帖子

汗,多谢,险些误人子弟

xiaofei314 发表于 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=;
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=; 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 编辑 ]

renyaozhong 发表于 2010-4-21 13:07

save('d:\mymfiles\wenjian','bianliang','-ASCII')

'-ASCII'这个参数就可以了

ChaChing 发表于 2010-4-21 13:29

都已经使用fprintf了, 干嘛还save F:\human3d.txt ???
请详细比较3/7F的差异! 或许7F还应该提醒下:loveliness:

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

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

xiaofei314 发表于 2010-4-21 13:39

还是不懂啊。。。

renyaozhong 发表于 2010-4-21 13:59

fprintf是在运行过程中,一点一点保存数据。比较灵活,可以加入文字、格式等等

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

save('d:\mymfiles\wenjian',A,'-ASCII'), 即可直接保存,是一种比较懒,也比较方便的做法,但是不能对数据格式做任何处理

amazonren 发表于 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 编辑 ]
页: [1] 2
查看完整版本: 如何把一个数组转成可读TXT文档输出?