如何把一个数组转成可读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 编辑 ] help fprintf 我这样写,但是显示有错误。。。。
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 编辑 ] 求助完整格式:出错代码和出错提示:@) 显示:??? Attempt to reference field of non-structure array.
求指教!谢谢!
回复 地板 ChaChing 的帖子
fprintf(fid,'%f%f%f%f%f%f ',I)?[ 本帖最后由 dreamstone 于 2010-4-20 22:11 编辑 ]
回复 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 编辑 ]
回复 6楼 dreamstone 的帖子
小错误!? fprint => fprintf回复 8楼 ChaChing 的帖子
汗,多谢,险些误人子弟 谢谢楼上各位指点!!!我改改看!少了一个分号。。添上之后能运行了,但是输出的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 编辑 ] save('d:\mymfiles\wenjian','bianliang','-ASCII')
'-ASCII'这个参数就可以了 都已经使用fprintf了, 干嘛还save F:\human3d.txt ???
请详细比较3/7F的差异! 或许7F还应该提醒下:loveliness:
还有请善用编辑功能!:@)
[ 本帖最后由 ChaChing 于 2010-4-21 13:40 编辑 ] 还是不懂啊。。。 fprintf是在运行过程中,一点一点保存数据。比较灵活,可以加入文字、格式等等
而如果你有一个完整的矩阵 A=rand(100,100)
save('d:\mymfiles\wenjian',A,'-ASCII'), 即可直接保存,是一种比较懒,也比较方便的做法,但是不能对数据格式做任何处理 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