文件写入方法
问题提出:现在要保存程序的输出结果,包括运行时间,运行结果和中间变量。其中运行时间和运行结果只是一个数字,中间变量结果时一个n*n的矩阵和一个2*n的矩阵。想把这些量保存在txt文件中。
save 函数
将工作空间中的变量写入文件,导出mat文件中。
1. 调用dlmwrite函数
dlmwrite(filename,M)
dlmwrite(filename,M,’D’) D用来指定数据间分隔符。 ‘ ’表示空格。’\t’ 制表符
dlmwrite(filename,M,’attrib1’,value1,’ attrib2’,value2,…………)
参数名(attribute) | 参数值(value) | 说明 |
delimiter | 单个字符 | 设定数据间分隔符 |
newline | ‘pc’ | 设定换行符为‘\r\n’ |
‘unix’ | 设定换行符为‘\n’ | |
precision | 以%引导的精度控制符 | 指定有效位数 |
dlmwrite('1.txt',A,' ') 将A中的数据存入1.txt中,并以空格作为分隔符。若没有文件1,则创建txt文件。
dlmwrite('2.txt',A,'\t') \t 制表符,有利于显示
dlmwrite('2.dat',A,' ') 将A中的数据存入2.dat中,并以空格作为分隔符。若没有文件1,则创建txt文件。
dlmwrite('2.txt',A,' ')
dlmwrite('2.txt',a,'-append') 将a中的数据接着存入2.txt中,若没有'-append'则将2.txt清空,再存入a。
总结:可以用dlmwrite 将运行结果存入txt文件中。
dlmwrite('result.txt',obj,'\t');
dlmwrite('a.txt',a,'\t');
dlmwrite('time.txt',cpu_time,'\t');
2,调用 fprintf 函数写入数据
以上调用dlmwrite函数虽然可以使用,但是不能将结果写入同一个文档中。尝试用fprintf函数实现写入同一个文档中的功能。
count= fprintf(fid,format,A,……) A存入fid
转换指示符用来控制符号表示法,对齐方式,有效位数,字段宽度和输出格式等。format字符串包括含不可打印的控制符,如换行或者制表符等。
1)控制标志(可选)“-”表示左对齐。
2)字段宽度(可选)
3)精度(可选)
4)转换符(必须) %-6.2f 表示以左对齐方式输出一个浮点数,宽度为6个字符,小数点后面有2个有效数字。
\f:进纸; \n:换行; \t:水平制表符;
注意:调用fprintf函数写入数据时,format参数指定的格式循环作用于列上,原始矩阵的列在文件中或屏幕上就变成了行。下次使用的时候要转置过来!
当n=9时,程序为:
fid=fopen('result.txt','at'); %新建一个result的txt文件存放结果
fprintf(fid,'% -f\n',cpu_time); %存储运行时间
fprintf(fid,'% -f\n',obj); %存储运行结果
fprintf(fid,'%-1.0f %-1.0f %-1.0f %-1.0f%-1.0f %-1.0f % -1.0f % -1.0f % -1.0f\r',a);% 以%开始,-为控制符号,1为字符宽度,0为小数点后面的位数,f为转化符,\r为换行。
fclose(fid);
总结:可以存放在同一个文档中便于管理,但是不足之处在于当n的值变大的时候,a变量的写入书写有难度。
下一步是思考当程序运行比较多的时候,怎么批量读数据和写数据以及数据和excel的交互。