matlab导出数据(fprintf,dlmwrite,xlswrite)

matlab导出数据(fprintfdlmwritexlswrite

1.用fprintf 函数写数据到txt,xls

Example:

x = 0:.1:1;
y = [x; exp(x)];
fid = fopen('exp.txt', 'w');
fprintf(fid, '%6.2f %12.8f\n', y);
fclose(fid)

tip:执行上述代码执行,肯定不会换行的,换行的问题试一下下面的代码

x = 0:.1:1;
y = [x; exp(x)];
fid = fopen('exp.txt', 'wt');
fprintf(fid, '%6.2f %12.8f\n', y);
fclose(fid);

这次就没有问题了,我们要注意fopne的参数wt 而不是 w,这是matlab的在线帮助的东东

fid = fopen(filename, permission_tmode) on Windows systems, opens the file in text 
mode instead of binary mode (the default). The permission_tmode argument consists 
of any of the specifiers shown in the Permission Specifiers table above, followed
by the letter t, for example 'rt' or 'wt+. On UNIX® systems, text and binary mode
 are the same. (UNIX is a registered trademark of The
Open Group in the United States and other countries).

就是有两种读取模式binary or text. When choosing the binary model,No characters are 
given special treatment. 所以我们选择要注明text模式。

2. dlmwrite :将一个矩阵写到由分隔符分割的文件中。

在保存整数到文件时使用save存为ascii文件时,常常是文件里都是实型格式的数据(有小数点,和后面很多的0,看着很不方便)。于是要保存此类数据时,我们可以使用此dlmwrite命令。

使用方法:
dlmwrite('filename', M)
使用默认分隔符“,”将矩阵M写入文本文件filename中;
dlmwrite('filename', M, 'D') 
使用分隔符D分割数据,“\t”表示tab分割,“,”为默认分割符;
dlmwrite('filename', M, 'D', R, C)
从矩阵M的第R行、第C列开始,作为要写矩阵块的左上角,将数据用D分割写入文件。
其他用法有:
dlmwrite('filename', M, 'attrib1', value1, 'attrib2', value2, ...)
dlmwrite('filename', M, '-append')
dlmwrite('filename', M, '-append', attribute-value list) 

例如: 

a = [1 2 3; 4 5 6; 7 8 9];
dlmwrite('test.txt', a);

则test.txt中的内容为:
1,2,3
4,5,6
7,8,9

而使用save 
a = [1 2 3; 4 5 6; 7 8 9];
save 'tst.txt' a -ascii;文本文件里的内容为:
    1.0000000e+000    2.0000000e+000    3.0000000e+000
    4.0000000e+000    5.0000000e+000    6.0000000e+000
    7.0000000e+000    8.0000000e+000    9.0000000e+000

3.xlswrite 写入excel

4.fprintf和dlmwrite区别

MATLAB在图像处理中的应用,实际是对图像矩阵的操做运算,MATLAB在图像处理中的常用的命令有:
imread(): 从图像文件夹中读取图像的函数;
imwrite(): 输出图像的函数;
imshow(), image(): 图像显示于屏幕的函数;
imcrop(): 对图像进行裁剪的函数;;
imresize(): 实现对图像的插值缩放的函数;
imrotate(): 用实现对图像的旋转。
im2double(),double(): 将图像数组转化为double类型; 
im2uint8(),uint8(): 将图像数组转化为uint8类型;
im2uint16(),uint16(): 将图像数组转化为uint16类型;
关于上述的命令使用方法可以参考一些MATLAB方面的书籍或者用MATLAB自带的帮助(help or doc)命令.
如  我想知道dwt2()命令的使用方法 可以执行下面的命令
>> help dwt2 或 >>doc dwt2
系统就会告诉你它的使用要求和方法,如果系统说找不到对应的帮助文件,那就可能是你装的MATLAB里面没有这个命令,那很可能这个命令就不能使用.

在图像数组的输出到文件的操作上,我发现fprintf比dlmwrite明显快很多,但这两个输出的数据格式有些差别,见下面操作:
>> a=[1 2 3;4 5 6;7 8 9]

a =

      1      2      3
      4      5      6
      7      8      9
>>fid = fopen('exp.txt','w');
  fprintf(fid,'%2.0f\n',a);
  fclose(fid);
 
 >> type exp.txt
 
 1
 4
 7
 2
 5
 8
 3
 6
 9
 fprintf输出是一列一列的从左到右输出。
>> dlmwrite('eg2.dat',a,'\n');
>> type eg2.dat

1
2
3
4
5
6
7
8
9
dlmwrite输出是一行一行的从上到下输出。

下面是一个比较简单的图像处理程序:
clear;%清除当前工作区所有变量
data=imread('E:\2D前处理\eg1.bmp');%从图像文件夹中读取图像eg1.bmp
data=double(data);%将图像数组data转化为double类型
[x,y]=size(data);%求数组大小,x是data数组有多少行,y是data数组有多少列
data1=imresize(data,[x,y*2/1.732]);%实现对图像的左右插值放大2/1.732倍
[x,y]=size(data1);%%求放大后图像数组大小
fid = fopen('E:\2D前处理\Particle\test.dat', 'wt');%打开图像数组的将要输出到文件
fprintf(fid, '%2.0f\t%2.0f\n', x, y);%输出x,y值
fprintf(fid, '%2.0f\n', data1);%输出图像数组数据
fclose(fid);%关闭文件指针


Matlab提供了从磁盘文件或剪贴簿转载数据至工作区(数据导入)和将工作区变量存 入磁盘文件(数据导出)的多种途径。
最简单的办法是使用界面导入向导,打开文件菜单中的导入数据而后按提示操作。Matlab支持的主要数据文件类型和对应函数如下:
clip_image001
导入文本文件 
文本文件需要具备统一的行列模式,使用分隔符作为数据项间隔,这些分隔符包括空格、逗号、tab、分号或其它。数据文件可能附带标题行和行列头标签。
数值数据 
对于数值数据可以直接使用load函数装载,例如my_data.txt中数据如下:
1 2 3 4 5
6 7 8 9 10
命令A = load('my_data.txt')装载该文本文件数据。
如果数值数据使用其它分隔符,可以使用dlmread读入,假设my_data.txt中数据如下:
7.2;8.5;6.2;6.6
5.4;9.2;8.1;7.2
命令A = dlmread('my_data.txt', ';')读入该数据。
包含行列标签的数值数据 
例如:
Grade1 Grade2 Grade3
78.8 55.9 45.9
99.5 66.8 78.0
89.5 77.0 56.7
fid = fopen('grades.dat', 'r');
grades = textscan(fid, '%f %f %f', 3, 'headerlines', 1);
fclose(fid);
包含字符和数值的混合数据 
使用textread函数读入。
导出文本文件 
save函数
A = [ 1 2 3 4 ; 5 6 7 8 ];
save my_data.out A –ASCII
dlmwrite函数
dlmwrite('my_data.out',A, ';')
MS-Excel电子表格文件 
xlsinfo获得文件信息
使用命令[type, sheets] = xlsfinfo(filename)返回文件类型type和工作表信息。如:[type, sheets] = xlsfinfo('tempdata.xls')
Xlswrite导出数据 
d = {'Time', 'Temp'; 12 98; 13 99; 14 97}
命令xlswrite('tempdata.xls', d, 'Temperatures', 'E1')将单元格数组d的数据写出至tempdata.xls文件,新建工作表'Temperatures',从该工作表的E1单元格开始写入。
Xlsread读入数据 
ndata = xlsread('tempdata.xls', 'Temperatures')
[ndata, headertext] = xlsread('tempdata.xls', 'Temperatures' )

在各论坛上看到很多关于这方面的问题,其实很简单的,MATLAB提供了这方面的比较方便的工具,可以通过File-import data 来从外部向MATLAB的WORKSPACE导入大量数据(原始数据文件的数据要有一定规律(行、列))如果数据文件本身没有说明文字(字母),就只有一个个的数据,可以使用load(’filename‘)函数来加载数据,数据导出直接可以将要保存的数据保存到*.mat文件(在workspace中选择要保存的变量右键选另存为即可)。当然导入导出数据也可以用fprintf,fscanf等文件操作指令进行,这样的好处在于可以在文件中写入一些提示性文字。



Matlab提供了从磁盘文件或剪贴簿转载数据至工作区(数据导入)和将工作区变量存入磁盘文件(数据导出)的多种途径。

最简单的办法是使用界面导入向导,打开文件菜单中的导入数据而后按提示操作。

一、导入文本文件

load函数、dlmread函数

文本文件需要具备统一的行列模式,使用分隔符作为数据项间隔,这些分隔符包括空格、逗号、tab、分号或其它。数据文件可能附带标题行和行列头标签。

数值数据

对于数值数据可以直接使用load函数装载,例如my_data.txt中数据如下:

1 2 3 4 5

6 7 8 9 10

命令A = load('my_data.txt')装载该文本文件数据。

 

如果数值数据使用其它分隔符,可以使用dlmread读入,假设my_data.txt中数据如下:

7.2;8.5;6.2;6.6

5.4;9.2;8.1;7.2

命令A = dlmread('my_data.txt', ';')读入该数据。

包含行列标签的数值数据

例如:

Grade1 Grade2 Grade3

78.8 55.9 45.9

99.5 66.8 78.0

89.5 77.0 56.7

fid = fopen('grades.dat', 'r');

grades = textscan(fid, '%f %f %f', 3, 'headerlines', 1);

fclose(fid);

包含字符和数值的混合数据

使用textread函数读入。

如果是规则的用空格隔开的数据,则采用data=textread(filename)格式调用,读出的数据记录在data矩阵中。

二、导出文本文件

save函数

A = [ 1 2 3 4 ; 5 6 7 8 ];

save my_data.out A –ASCII

dlmwrite函数

dlmwrite('my_data.out',A, ';')

三、MS-Excel电子表格文件

xlsinfo获得文件信息

使用命令[type, sheets] = xlsfinfo(filename)返回文件类型type和工作表信息。如:[type, sheets] = xlsfinfo('tempdata.xls')

Xlswrite导出数据

d = {'Time', 'Temp'; 12 98; 13 99; 14 97}

命令xlswrite('tempdata.xls', d, 'Temperatures', 'E1')将单元格数组d的数据写出至tempdata.xls文件,新建工作表'Temperatures',从该工作表的E1单元格开始写入。

Xlsread读入数据

ndata = xlsread('tempdata.xls', 'Temperatures')

[ndata, headertext] = xlsread('tempdata.xls', 'Temperatures')

底层文件输入输出函数

fclose   关闭文件

fopen   打开文件

fread   从文件中读入二进制数据

fwrite  把二进制数据写入文件

fgetl   逐行从文件中读取数据并放弃换行符

fgets   从文件中读取行,保留换行符并把行作为字符串返回

fprintf  把格式化数据写入文件

fscanf  从文件中读取格式化数据

feof    测试文件是否结束

ferror   测试文件输入输出错误信息

frewind 文件指针归零

fseek   设置文件位置指针

ftell    获取文件位置指针

sprintf  把格式化数据写入一个字符串

sscanf   使用格式控制读取字符串

底层文件输入输出函数-->特殊函数

csvread   读取逗号分隔格式的数据文件到矩阵

csvwrite   写矩阵到逗号分隔格式的数据文件

dlmread   把一个ASCII限定文件(数据文件)读入矩阵

dlmwrite   把矩阵写入到ASCII限定文件(数据文件)

hdf       HDF接口??

imfinfo   返回图形图象文件的信息

imread    读取图象(到矩阵)

imwrite   写入图象

textread   从文本文件读取格式化数据(important)

wk1read  把Lotus123电子表格读入矩阵

wk1write  把矩阵写入Lotus123wk1电子表格

xlsread   读取excel表格


 Example 1 — Reading Different Types of DataText file scan1.dat contains data in the following
form:

Sally  Level1 12.34 45 1.23e10 inf NaN Yes

Joe    Level2 23.54 60 9e19 -inf 0.001 No

Bill   Level3 34.90 12 2e5 10 100 No

Read each column into a variable: 

fid = fopen('scan1.dat');
     C = textscan(fid, '%s %s %f32 %d8 %u %f %f %s');
     fclose(fid);

Note:Spaces between the conversion specifiers are shown only to make the example easier to read. They are not required.

textscan returns a 1-by-8 cell array C with the following cells:

C{1} = {'Sally'; 'Joe'; 'Bill'}          class cell
     C{2} = {'Level1'; 'Level2'; 'Level3'}    class cell
     C{3} = [12.34; 23.54; 34.9]              class single
     C{4} = [45; 60; 12]                      class int8
     C{5} = [4294967295; 4294967295; 200000]  class uint32
     C{6} = [Inf; -Inf; 10]                   class double
     C{7} = [NaN; 0.001; 100]                 class double
     C{8} = {'Yes'; 'No'; 'No'}               class cell

The first two elements of C{5} are the maximum values for a 32-bit unsigned integer, or intmax('uint32').


  • 9
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值