精华内容
下载资源
问答
  • 不知道大家在使用matlab时有没有这样的困惑,想把自己运行的数据存储excle中或者使用excle表中的数据进行分析,这样方便自己运用运行结果也方便截取自己的文章中,今天介绍这两个工具包xlswrite、xlsread,其功能...

    v2-74791944d7bbdbe5872fc9ab0a197df1_1440w.jpg?source=172ae18b

    不知道大家在使用matlab时有没有这样的困惑,想把自己运行的数据存储到excle中或者使用excle表中的数据进行分析,这样方便自己运用运行结果也方便截取到自己的文章中,今天介绍这两个工具包xlswrite、xlsread,其功能相当强大,可以截取自己想要某一部分的数据和存储到某一个位置的数据都非常方便!下面就给出这两个工具包的用法如下:

    基础不牢或者初学者推荐Matlab2018a版这版书,很实用:

    (一)将MAtlab运行的数据保存到指定的excleb表格中

    语法xlswrite(filename,A)xlswrite(filename,A,sheet)xlswrite(filename,A,xlRange)xlswrite(filename,A,sheet,xlRange)status = xlswrite(___)[status,message] = xlswrite(___)

    说明

    示例xlswrite(filename,A) 将矩阵 A 写入 Microsoft® Excel® 电子表格工作簿 filename 中的第一张工作表,从单元格 A1 开始写入。xlswrite(filename,A,sheet) 将数据写入指定的工作表。xlswrite(filename,A,xlRange) 将数据写入工作簿的第一个工作表中由 xlRange 指定的矩形区域内。使用 Excel 范围语法,例如 'A1:C3'
    示例xlswrite(filename,A,sheet,xlRange) 将数据写入指定的工作表和范围。status = xlswrite(___) 使用先前语法中的任何输入参数返回写入操作的状态。当操作成功时,status 为 1。否则,status 为 0[status,message] = xlswrite(___) 还在结构体 message 中返回写入操作生成的任何警告或错误消息。

    示例将向量写入电子表格
    将 7 元素向量写入 Excel® 文件。
    filename = 'testdata.xlsx'; A = [12.7 5.02 -98 63.9 0 -.2 56]; xlswrite(filename,A) 写入电子表格的特定工作表和范围
    将混合文本和数值数据写入 Excel® 文件,从 Sheet2E1 开始写入。
    filename = 'testdata.xlsx'; A = {'Time','Temperature'; 12,98; 13,99; 14,97}; sheet = 2; xlRange = 'E1'; xlswrite(filename,A,sheet,xlRange)


    (二)将保存的excle中的数据读取到matlab的工作台中

    语法num = xlsread(filename)num = xlsread(filename,sheet)num = xlsread(filename,xlRange)num = xlsread(filename,sheet,xlRange)num = xlsread(filename,sheet,xlRange,'basic')[num,txt,raw] = xlsread(___)___ = xlsread(filename,-1)[num,txt,raw,custom] = xlsread(filename,sheet,xlRange,'',processFcn)

    说明

    示例num = xlsread(filename) 读取名为 filename 的 Microsoft® Excel® 电子表格工作表中的第一张工作表,并在一个矩阵中返回数值数据。num = xlsread(filename,sheet) 读取指定的工作表。
    示例num = xlsread(filename,xlRange) 从工作簿的第一个工作表的指定范围内读取数据。使用 Excel 范围语法,例如'A1:C3'
    示例num = xlsread(filename,sheet,xlRange) 读取指定的工作表和范围。num = xlsread(filename,sheet,xlRange,'basic')basic 导入模式下读取电子表格中的数据。如果您的计算机未安装 Windows® 版 Excel,xlsread 会自动在 basic 导入模式下运行,该模式支持 XLS、XLSX、XLSM、XLTX 和 XLTM 文件。
    如果不指定所有参数,请使用空字符向量 '' 作为占位符,例如,num = xlsread(filename,'','','basic')
    示例[num,txt,raw] = xlsread(___) 还使用先前语法中的任何输入参数,在元胞数组 txt 中返回文本字段,在元胞数组 raw 中返回数值数据和文本数据。___ = xlsread(filename,-1) 打开一个 Excel 窗口以便按交互方式来选择数据。选择工作表,将鼠标拖放到所需范围上,然后点击确定。只有安装了 Microsoft Excel 软件的 Windows 计算机才支持此语法。
    示例[num,txt,raw,custom] = xlsread(filename,sheet,xlRange,'',processFcn)(其中 processFcn 是函数句柄)读取电子表格,对数据调用 processFcn,并在数组 num 中以数值数据的形式返回最终结果。xlsread 函数在元胞数组 txt 中返回文本字段、在元胞数组 raw 中返回数值和文本数据,并在数组 custom 中返回 processFcn 的第二个输出。xlsread 函数不会更改电子表格中存储的数据。只有安装了 Excel 软件的 Windows 计算机才支持此语法。

    示例将工作表读取到数值矩阵
    创建一个名为 myExample.xlsx 的 Excel 文件。
    values = {1, 2, 3 ; 4, 5, 'x' ; 7, 8, 9}; headers = {'First','Second','Third'}; xlswrite('myExample.xlsx',[headers; values]);myExample.xlsxSheet1 包含:
    First Second Third 1 2 3 4 5 x 7 8 9
    读取第一个工作表中的数值数据。
    filename = 'myExample.xlsx'; A = xlsread(filename)
    A = 1 2 3 4 5 NaN 7 8 9读取元胞的范围
    从上一示例的 Excel 文件中读取特定范围的数据。
    filename = 'myExample.xlsx'; sheet = 1; xlRange = 'B2:C3'; subsetA = xlsread(filename,sheet,xlRange)
    subsetA = 2 3 5 NaN读取列
    从第一个示例的 Excel 文件中读取第二列。
    filename = 'myExample.xlsx'; columnB = xlsread(filename,'B:B')
    columnB = 2 5 8
    要获得更佳的性能,可在范围中包括行号,例如 'B1:B3'请求数值、文本和原始数据
    从第一个示例中的 Excel 文件中请求数值数据、文本数据和合并数据。
    [num,txt,raw] = xlsread('myExample.xlsx')
    num = 1 2 3 4 5 NaN 7 8 9 txt = 'First' 'Second' 'Third' '' '' '' '' '' 'x' raw = 'First' 'Second' 'Third' [ 1] [ 2] [ 3] [ 4] [ 5] 'x' [ 7] [ 8] [ 9]

    以上两个函数是excle中的数据读取和存储,这两函数对于我们做数据分析和数据处理来说必不可少,所以要熟炼!

    展开全文
  • LOAD/SAVE主要的high level file I/O routines 是LOAD ... SAVE可以将MATLAB变量写入MAT-file格式或者空格间隔的ASCII data。大多数情况下,语法相当简单。下面的例子用到数值由空格间隔的ASCII file sample_file.tx...

    LOAD/SAVE

    主要的high level file I/O routines 是LOAD 和 SAVE函数。LOAD

    可以读MAT-file data或者用空格间隔的格式相似的ASCII data. SAVE可以将MATLAB变量写入MAT-file格式或者空格间隔的ASCII data。大多数情况下,语法相当简单。下面的例子用到数值由空格间隔的ASCII file sample_file.txt :

    1 5 4 16 8

    5 43 2 6 8

    6 8 4 32 1

    90 7 8 7 6

    5 9 81 2 3

    Example:

    用 LOAD and SAVE 读写数据

    CODE:

    % Load the file to the matrix, M :

    M = load('sample_file.txt')

    % Add 5 to M :

    M = M +5

    % Save M to a .mat file called 'sample_file_plus5.mat':

    save sample_file_plus5 M

    % Save M to an ASCII .txt file called 'sample_file_plus5.txt' :

    save sample_file_plus5.txt M -ascii

    UIGETFILE/UIPUTFILE

    UIGETFILE/UIPUTFILE是基于图形用户界面(GUI)的。会弹出对话框,列出当前目录的文件和目录,提示你选择一个文件。UIGETFILE让你选择一个文件来写(类似Windows ‘另存为’选项?)。用UIGETFILE,可以选择已存在的文件改写,也可以输入新的文件名。两个函数的返回值是所选文件名和路径。

    Example:

    用 UIGETFILE 从当前目录选择一个 M-file

    CODE:

    % This command lists all the M-files in the current directory and

    % returns the name and path of the selected file

    [fname,pname] = uigetfile('*.m','Sample Dialog Box')

    注意: UIGETFILE 一次只能选择一个文件。

    UIIMPORT/IMPORTDATA

    UIIMPORT是一个功能强大,易于使用的基于GUI的high level routine,用于读complex data files。文件也必须是homogeneous。

    IMPORTDATA形成UIIMPORT的功能,不打开GUI。可以将IMPORTDATA用于函数或者脚本中,因为在函数或者脚本中基于GUI的文件导入机制并不理想。下面的例子用到包含几行文件头和文本、数值数据的文件'sample_file2.txt' :

    This is a file header.

    This is file is an example.

    col1 col2 col3 col4

    A    1   4    612.000

    B    1   4    613.000

    C    1   4    614.000

    D    1   4    615.000

    Example: Using IMPORTDATA to read in a file with headers, text, and numeric data

    CODE:

    % This reads in the file 'sample_file2.txt' and creates a

    % structure D that contains both data and text data.

    % Note the IMPORTDATA command specifies a white space

    % as the delimiter of the file, but IMPORTDATA can usually

    % detect this on its own

    D = importdata('sample_file2.txt','')  % 原文有误?

    D = importdata('sample_file2.txt')

    可以通过访问结构D的数据和文本域,来看结构D中的真实值,例如输入:

    data = D.data

    text = D.textdata

    可以用UIIMPORT读同一个文件并得到同样的结构.

    注意: 对于 ASCII data, 你必须检验导入向导正确的识别了列分隔符。

    TEXTREAD/STRREAD

    TEXTREAD 是一个强大的动态high level routine,设计用来读ASCII格式的文本和/或数值数据文件。STRREAD除是从字符串而不是文件读以外,类似于TEXTREAD。

    两个函数可以用许多参数来改变其具体的工作方式,他们返回读入指定输出的数据。他们有效的提供给你一个

    “两全其美”的方法,因为他们可以用一个命令读入混合的ASCII和数值数据(high level routines的做法),并且你可以改变他们以匹配你特定的应用(如同low level routines做到的)。例子:

    CODE:

    Example 1: Using TEXTREAD to read in an entire file into a cell array

    % This command reads in the file fft.m into the cell array, file

    file = textread('fft.m','%s','delimiter','\n','whitespace','');

    CODE:

    Example 2: Using STRREAD to read the words in a line

    % This command uses the cell array created in Example 1 to

    % read in each word of line 28 in 'file' to a cell array, words

    words = strread(file{28},'%s','delimiter','')

    CODE:

    Example 3: Using TEXTREAD to read in text and numeric data from a file with headers

    % This command skips the 2 header lines at the top of the file

    % and reads in each column to the 4 specified outputs

    [c1 c2 c3 c4] = textread('sample_file2.txt','%s %s %s %s','headerlines',2)

    CODE:

    Example 4: Using TEXTREAD to read in specific rows of text and numeric data from a file

    % This command reads in rows B and C of the file. The 'headerlines'

    % property is used to move down to the desired starting row and the

    % read operation is performed 2 times

    [c1 c2 c3 c4] = textread('sample_file2.txt',...

    '%s %s %s %s',2,'headerlines',4)

    CODE:

    Example 5: Using TEXTREAD to read in only the numeric data from a file containing text and numbers

    % This command reads in only the numeric data in the file. The

    % 'headerlines' property is used to move down to the first row

    % of interest and the first column of text is ignored with the

    % '*'  operator

    [c2 c3 c4] = textread('sample_file2.txt','%*s %d %d %f','headerlines',3)

    DLMREAD/DLMWRITE/CSVREAD

    DLMREAD 和 DLMWRITE函数能够读写分隔的ASCII data,而不是用low level routines。他们比low level routines容易使用,Low level routines用几行代码实现的功能可以用DLMREAD/DLMWRITE简化成一行。

    CSVREAD用来读分隔符是逗号的文件,是DLMREAD的特殊情况。当读空格和Tab分隔的电子数据表文件时,DLMREAD特别有用。以'sample_file.txt'为例:

    CODE:

    Example 1: Using DLMREAD to read in a file with headers, text, and numeric data

    % This reads in the file 'sample_file2.txt' and creates a matrix, D,

    % with the numeric data this command specifies a white space as the

    % delimiter of the file

    D = dlmread('sample_file.txt','')

    CODE:

    Example 2: Using DLMREAD to extract the first 3 columns of the last 3 rows

    % This reads in the first 3 columns of the last 3 rows of

    % the data file 'sample_file.txt'into the matrix, D_partial.

    % 读文件 'sample_file.txt' 前3列后3行,到矩阵D_partial.

    D_partial = dlmread('sample_file.txt','',[2 0 4 2])

    CODE:

    Example 3: Using DLMWRITE to write a comma delimited file

    % This creates a file called 'partialD.txt' that consists of

    % the first 3 columns of the last 3 rows of data where each

    % element is separated by a comma

    dlmwrite('partialD.txt',D_partial,',')

    注意: 保证DLMREAD and DLMWRITE指定范围的指标从0开始,而不是从1开始。

    WK1READ/WK1WRITE

    WK1READ 用来读Lotus123 电子数据表文件的数据;WK1WRITE用来写矩阵到Lotus123 电子数据表文件。

    XLSREAD

    XLSREAD用来读Excel的数值和文本数据。

    ---------------------------------------------------------------------------------------------------------

    三. 具体例子分析:

    Matlab网站用两个例子非常详尽地介绍了各个命令的基本用法,实际中,面对手头上的数据,如何选用合适的命令呢?以下结合几个示例给出一些总结,大家举一反三就可以了:

    1. 纯数据(列数相同):

    源文件:

    CODE:

    0 3866.162 2198.938 141.140

    1 3741.139 2208.475 141.252

    2 3866.200 2198.936 141.156

    3 3678.048 2199.191 141.230

    4 3685.453 2213.726 141.261

    5 3728.769 2212.433 141.277

    6 3738.785 2214.381 141.256

    7 3728.759 2214.261 141.228

    8 3748.886 2214.299 141.243

    9 3748.935 2212.417 141.253

    10 3733.612 2226.653 141.236

    11 3733.583 2229.248 141.223

    12 3729.229 2229.118 141.186

    解答:对于这个txt文件,由于各行列数相同,故简单地使用load,importdata均可。

    2.字段名(中、英文字段均可)+数据:

    源文件:

    CODE:

    CH0 CH1 CH2 CH3

    0.000123 0.000325 0.000378 0.000598

    0.000986 0.000256 0.000245 0.000698

    解答:由于是记录的形式,因此各行列数必相同(缺少部分列时请自行在文件中补上 Inf 或 NaN),故直接使用 importdata 便可。

    3.注释(含有独立的数字串)+数据(列数相同):

    问题:这个文件有4列,但前6行是文字说明,4列数字是从第8行开始的.现在我想把这个文件的前2列和文字说明提出来组成一个新的dat文件

    源文件:

    CODE:

    Group 2  12.02.2006   Limei

    Samples of datas: 50000

    CH0  CH1  CH2  CH3

    0.000123  0.000325   0.000378   0.000598

    0.000986  0.000256   0.000245   0.000698

    目标文件:

    CODE:

    Group 2 12.02.2006 Limei

    Samples of datas: 50000

    CH0 CH1

    0.000123 0.000325

    0.000986 0.000256

    解答:由于注释中含有独立的数字串,且注释部分没有明显的格式,这时候用importdata, load等高级命令直接读取会失败,用 textread, dlmwrite 等格式化命令也不太合适,因此只能使用低级命令进行读取。(当然了,可以跳过注释部分直接用高级命令读取数据,即:[a b c d] = textread(filename,'%f %f %f %f','headerlines',4); )。一个简单的、非通用的包含注释的读取方法如下:

    -------------------------------------转 ---------------------------------------------------------------------------------------

    CODE:

    clc;clear;

    fid = fopen('exp.txt', 'r');

    fid_n=fopen('ex.dat','w');

    while ~feof(fid)

    tline=fgetl(fid);

    if ~isempty(tline)

    if double(tline(1))>=48 && double(tline(1))<=57  %数值开始

    a=strread(tline);

    a(3:4)=[];

    fprintf(fid_n,'%f %f\n',a);

    clear a;

    elseif double(tline(1))==67   %字母C开始

    [b1,b2,b3,b4]=strread(tline,'%s %s %s %s');

    b=[b1{1},'  ',b2{1}];

    fprintf(fid_n,'%s\n',b);

    clear b b1 b2 b3 b4;

    else

    fprintf(fid_n,'%s\n',tline);

    end

    else

    fprintf(fid_n,'%s\n',tline);

    end

    end

    fclose(fid);

    fclose(fid_n);

    ---------------------------------------------------------------------------------

    4. 注释(不含独立的数字串)+数据(列数相同):

    源文件:

    CODE:

    你好 abc

    欢迎来到 我们

    振动论坛

    vib.hit.edu.cn

    1 11 111 1111

    2 22 222 2222

    3 33 333 3333

    4 44 444 4444

    5 55 555 5555

    解答:直接用 importdata 便可

    注:有时候注释中含有独立的数字串也可以 importdata 成功,不过得到的结果有可能不正确,建议这时候使用第3种情形的读取方式。

    5. 注释与数据混排:

    对此当然只能自己编程,举例:

    源文件:

    CODE:

    1 11 111 1111

    你好

    2 22 222 2222

    欢迎来到

    3 33 333 3333

    振动论坛

    4 44 444 4444

    vib.hit.edu.cn

    5 55 555 5555

    解答:

    --------------------------------------------转--------------------------------------

    CODE:

    function [data]=distilldata(infile)

    %功能说明:

    %将保存数据的原始文件中的数值数据读入到一个data变量中

    %使用说明:

    % infile——原始数据文件名;

    % data=数据变量

    tmpfile='tmp2.mat';

    fidin=fopen(infile,'r'); % 打开原始数据文件(.list)

    fidtmp=fopen(tmpfile,'w'); % 创建保存数据文件(不含说明文字)

    while ~feof(fidin) % 判断是否为文件末尾

    tline=fgetl(fidin); % 从文件读入一行文本(不含回车键)

    if ~isempty(tline) % 判断是否空行

    [m,n]=size(tline);

    flag=1;

    for i=1:n %判断一行中有没有字符(+-.Ee和空格键除外)

    if ~(tline(i)==' '|tline(i)=='-'|tline(i)=='.'|tline(i)=='E'...

    |tline(i)=='e'|tline(i)=='+'...

    |(double(tline(i))>=48&&double(tline(i))<=57))

    flag=0;

    break;

    end

    end

    if flag==1 % 如果是数字行,把此行数据写入文件

    fprintf(fidtmp,'%s\n',tline);

    end

    end

    end

    fclose(fidin);

    fclose(fidtmp);

    data=textread(tmpfile);

    delete(tmpfile);

    ---------------------------------------------------------------------------------------------------------

    另外,如果要求不高,也可以使用 textread 函数跳过注释部分进行读取,不过前提是需要事先知道文件内容的结构(即哪行是数据、哪行是注释)

    6.各列数据的分离:

    源文件:

    CODE:

    0 +  47038.7   1.05  09:26:07  C

    2 +  46477.7   1.03  09:28:38  C

    4 +  44865.7   1.04  09:28:48  C

    6 +  41786.4   1.03  09:28:56  C

    8 +  39896.0   0.97  09:29:03  C

    10 +  37518.4   0.93  09:29:15  C

    12 +  35858.5   0.92  09:29:30  C

    14 +  46105.0   1.03  09:30:21  C

    16 +  46168.6   6.89  09:30:30  C

    18 +  48672.3   4.33  09:30:40  C

    20 +  49565.7   0.49  09:30:48  C

    22 +  49580.7   0.53  09:30:55  C

    24 +  49602.3   0.84  09:31:03  C

    26 +  49582.5   1.51  09:31:11  C

    28 +  49577.0   1.39  09:31:19  C

    30 +  49589.3   0.61  09:31:27  C

    32 +  49578.3   1.06  09:31:29  C

    34 +  49512.5   1.77  09:31:38  C

    解答:直接用 [a,b,c,d,e,f]=textread(yourfilename,'%d %c %f %f %s %c'); 便可

    四. 注意事项:

    1. 请在 matlab 中保持当前路径在该数据文件对应的目录下进行存取,否则,存取时请给出该数据文件的具体路径。

    2. 存取时,请给出该数据文件的全称(包括后缀名,读取mat文件时可省略)

    3. load data.txt和A=load(‘data.txt’)的区别请参阅精华贴:[原创]写给学习 matlab 的新手们

    4. 请根据读写需要来打开文件,即根据你的需要来指定 fopen 的 permission 属性为读或写。如果只用 a 进行写入,就不能用 fread 读取。此时应该写完关闭文件,然后用 r 打开读取,或者直接用 a+ 进行同时读写操作。否则,会产生莫名其妙的问题!以下代码是一个错误的例子:

    CODE:

    filename='e.dat';

    fid=fopen(filename,'a');

    if fid<0

    error('fopen error');

    end

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

    fwrite(fid,s,'float32')

    [dd ll]=fread(fid,inf,'float32');%把t中的数据全部读出,即s矩阵。

    fclose(fid);

    此时得到的dd, ll 是错误且无意义的!

    五. 其他相关问题:

    1. 连续读取多个文件的数据,并存放在一个矩阵中:

    (1) 首先是如何读取文件名:

    方法一:

    filename=dir(‘*.jpg’);

    那么第i个文件的文件名就可以表示为

    filename(i).name

    文件数量为:length(filename)

    方法二:

    先在Windows的 MSDOS(命令行)中使用以下命令生成一个list.txt文件:

    dir path\folder /on /b /s > path\list.txt

    举例:dir d:\test /on /b /s > d:\list.txt

    然后在 matlab 中使用:

    filename = textread(sFileFullName,'%s');

    把所有文件名读取到list细胞矩阵中,最后对filename{i}便可得到各文件名。

    (2) 然后是读取文件名的数据并存储:

    假设每个文件对应的数据是m*n的,则:

    CODE:

    k = length(filename);

    Data = zeros(m,n,k);

    for ii = 1:k

    Data(:,:,ii) = yourreadstyle(filename{ii}); %yourreadstyle是对应的文件读取方式的函数

    end

    2. 连续读取多个文件的数据,并存放在多个矩阵(以文件名命名)中:

    假设每个文件对应的数据是m*n的,则以上述第二种文件名读取方法为例:

    CODE:

    k = length(filename);

    for ii = 1:k

    D = yourreadstyle(filename{ii});

    eval([‘Data_’, num2str(ii), ‘ = D;’]);

    end

    3. 文件名命名问题:

    文件名为 abc00001,abc00002,... abc00009,abc00010,... abc00099,abc00100,...abc00879.  准备把这些文件名给放到一个数组里面去。

    解答:

    CODE:

    a=cell(879,1);

    for k=1:879

    a{k} = sprintf('%.5d',k);

    end

    4. 上述各种文件格式、类型自动识别问题:可以利用正则表达式来处理,使之通用性较强。例如使用以下代码可以自动处理上面提到了例1到例5各种情形,不过由于存在自动判断,对某些例子(如例1)效率自然要低一点,而对于另外的例子(如例3、例5)效率估计要高一点(少用了一个循环)。

    CODE:

    function [data]=distilldata_eight(infile)

    %功能说明:

    %将保存数据的原始文件中的数值数据读入到一个data变量中(自动判断数据行)

    %使用说明:

    % infile——原始数据文件名;

    % data=数据变量

    tmpfile='tmp2.mat';

    fidin=fopen(infile,'r'); % 打开原始数据文件(.list)

    fidtmp=fopen(tmpfile,'w'); % 创建保存数据文件(不含说明文字)

    while ~feof(fidin) % 判断是否为文件末尾

    tline=fgetl(fidin); % 从文件读入一行文本(不含回车键)

    if ~isempty(tline) % 判断是否空行

    str = '[^0-9 | \. | \- | \s | e | E]'; %正则表达式为:该行中是否包含除 - . E e 数字 和 空白字符 外的其他字符

    start = regexp(tline,str, 'once');

    if isempty(start)

    fprintf(fidtmp,'%s\n',tline);

    end

    end

    end

    fclose(fidin);

    fclose(fidtmp);

    data=textread(tmpfile);

    delete(tmpfile)

    5. 大量数据的读取问题:

    可以考虑使用循环分批读取(特别是在各数据是独立的时候),或者使用稀疏矩阵来实现(对此可以参阅本版精华贴: [原创]提高matlab运行速度和节省空间的一点心得(之三))。另外,也可参考《深入浅出MATLAB 7_X混合编程》一书第一章

    6. 读取整个txt文件的内容(获得文件中的所有字符):

    CODE:

    f = fopen('yourfilename.txt','rt'); % t 属性根据需要可省略

    x = fread(f,'*char');

    fclose(f);

    7. 把维数不同的矩阵及其变量名保存到一个 txt 文件中,例如 a1 = 123; a2 = [1 2 3;4 5 6] ,希望得到的 txt 文件如下:

    QUOTE:

    a1:

    123

    a2:

    1 2 3

    4 5 6

    如果写入的时候简单一点,则可以采用以下方式,不过读取的时候比较麻烦:

    CODE:

    a1=123;

    a2=[1 2 3;4 5 6];

    fid = fopen('myfile.txt', 'wt');

    for i=1:2

    fprintf(fid, '%s: \n %s\n', ['a',int2str(i)], mat2str(eval(['a',int2str(i)])));

    end

    fclose(fid);

    相反,如果写入的时候复杂一点,则读取的时候会简单一点:

    CODE:

    a1=123;

    a2=[1 2 3;4 5 6];

    fid = fopen('myfile.txt', 'wt');

    for i=1:2

    fprintf(fid, '%s: \n', ['a',int2str(i)]);

    b = eval(['a',int2str(i)]);

    fprintf(fid, [repmat('%d ', 1, size(b,2)), '\n'], b');

    end

    fclose(fid);

    展开全文
  • Matlab将mat格式数据保存txt格式

    万次阅读 2016-04-05 21:07:33
    对机器学习等领域而言,数据的重要性不言而喻,在开发时需要不同格式的数据进行转换从而应用不同的开发环境中,本文介绍matlab中的dlmwrite()函数。 dmwrite()函数的功能是矩阵以ASCII格式写入文件中。 一...

    对机器学习等领域而言,数据的重要性不言而喻,在开发时需要将不同格式的数据进行转换从而应用到不同的开发环境中,本文介绍matlab中的dlmwrite()函数的用法。

    dmwrite()函数的功能是将矩阵以ASCII格式写入到文件中。


    一、语法及功能描述


    dlmwrite(filename, M)

    将数组M写入到ASCII格式的文件中,文件名为filename,每个元素之间默认以‘,’隔开。如果filename已经存在,则该函数将覆盖。


    dlmwrite(filename, M, '-append')

    将数据添加到已经存在的filename文件后面。


    dlmwrite(filename, M, delimiter)

    将数据M写入到filename文件中,并以特殊字符delimiter将每个元素隔开。


    二、参数说明


    filenane:写入文件名;

    M:需要保存的数据;

    delimiter:两个元素之间的分隔符;

    precision:数据精度;

    newline:行终止符,‘pc’表示使用回车换行符,‘unix’表示换行符。


    三、示例


    1、写入数据时以逗号分隔元素

    生成一个样本矩阵M

    M = magic(3);

    使用默认的分隔符‘,’将矩阵M写入到文件myFile.txt中

    dlwrite(‘myFile.txt’, M)
    

    查看文件中的数据

    type(‘myFile.txt’)
    8    1    6

    3    5    7
    4    9    2


    2、以Tab间隔分隔元素并保存指定精度

    M = magic(3)*pi
    dlmwrite('myFile.txt', M, 'delimiter', '\t', 'precision', 3)
    type('myFile.txt')

    25.1    3.14    18.8
    9.42    15.7    22
    12.6    28.3    6.28


    3、在文件后添加数据

    M = magic(5);
    N = magic(3);
    
    dlmwrite('myFile.txt', M, 'delimiter', ' ');
    
    dlmwrite('myFile.txt', N, '-append', 'delimiter', ' ', 'roffset', 1)
    type('myFile.txt')

    17 24 1 8 15
    23 5 7 14 16
    4 6 13 20 22
    10 12 19 21 3
    11 18 25 2 9
     
    8 1 6
    3 5 7
    4 9 2


    4、以指定精度写入到文件中

    M = magic(3);
    dlmwrite('myFile.txt', M, 'precision', '%.6f')
    type('myFile.txt')

    8.000000,1.000000,6.000000
    3.000000,5.000000,7.000000
    4.000000,9.000000,2.000000


    5、指定行终止符

    M = magic(3);
    dlmwrite('myFile.txt', M, 'delimiter', ' ','newline','unix')
    type('myFile.txt')

    展开全文
  • 6. 其他可用于将数据保存到.txt中的函数  save M = magic(5); save 'myFile.txt' M -ascii  myFile.txt中结果(结果采用科学计数法表示):    fopen+fprintf+fclose   M = magic(5);...

    dlmwrite的5种基本语法

    dlmwrite(filename,M);
    dlmwrite(filename,M,'-append');
    dlmwrite(___,Name,Value);
    dlmwrite(filename,M,delimiter);
    dlmwrite(filename,M,delimiter,row,col);
    % filename : 需要写入的文件名
    % M        : 需要写入的数据
    % delimiter: 数据元素分隔符,常与' '或','或'\t'或string连用,如:'delimiter',';'
    % row      : 行偏移(默认值为0)
    % col      : 列偏移(默认值为0)
    % 'roffset': 行偏移,常与数字连用,如:'roffset',2
    % 'coffset': 列偏移,常与数字连用,如:'coffset',1
    % 'precision' : 数字精度,常连用,如:'precision',3 或 'precision','%10.5f'
    % 'newline':行分隔符,常与'pc'或'unix'连用,如:'newline','pc'

    1. 写入逗号分隔的数据

    M = magic(3);
    dlmwrite('myFile.txt',M);
    type('myFile.txt');   % 观察结果

      Matlab结果展示:

       

      而myFile.txt中两行数据没有分开,结果如下:

       

    2. 写入制表符分隔的数据并指明精度

    M = magic(3)*pi;
    dlmwrite('myFile.txt',M,'delimiter','\t','precision',3)
    type('myFile.txt')  % 观察结果

      Matlab结果展示:

      

      myFile.txt中两行数据没有分开,结果如下:

      

    3. 写入数据并添加别的数据到文件中

    M = magic(5);
    N = magic(3);
    dlmwrite('myFile.txt',M,'delimiter',' ');    % 写入数据M
    dlmwrite('myFile.txt',N,'-append','delimiter',' ','roffset',1);  % 添加数据N
    type('myFile.txt');        % 观察结果
    dlmread('myFile.txt');     % 使用dlmread读取数据

      Matlab中结果:

      

      dlmread读取结果如下(用“ 0 ”填充较小的矩阵):

       

      myFile.txt中两行数据没有分开,结果如下:

      

    4. 写入数据并将精度指定为字符串

    M = magic(3);
    dlmwrite('myFile.txt',M,'precision','%.6f');
    type('myFile.txt');        % 观察结果

      Matlab中结果:

      

      myFile.txt中结果如下(没出现两行不分开):

      

    5. 写入数据并实现每行结束用换行符换行

    M = magic(5);
    dlmwrite('myFile.txt',M,'delimiter',',','newline','pc');

      myFile.txt中的结果(前一行的结尾有换行符,两行数据分开):

      

    6. 其他可用于将数据保存到.txt中的函数

      save

    M = magic(5);
    save 'myFile.txt' M -ascii

      myFile.txt中结果(结果采用科学计数法表示):

      

      fopen+fprintf+fclose

      

    M = magic(5);
    fileID = fopen('myFile.txt','w');        % 以写入方式打开文件
    fprintf(fileID,'%5d %5d %5d %5d %5d\n',M);    % 写入数据
    fclose(fileID);        % 关闭文件

      matlab中的结果:

      

      myFile.txt中的结果:

       

    总结

    不积跬步,无以至千里;不积小流,无以成江海。

    为了这个知识点,网上翻阅了很多资料,也认真阅读了matlab的帮助文档,终于自己独立研究出“写入数据并在每行结束处用换行符换行”的语句,真的很高兴(后来发现有人已经搞出来了...),所以特将dlmwrite的用法总结出来,以供大家参考。

    如有雷同,纯属巧合!


    致谢:

    https://blog.csdn.net/dushulin111/article/details/52005997

    https://blog.csdn.net/hengyaha/article/details/78995291

    http://blog.sina.com.cn/s/blog_5e73a8fc01013fob.html

    matlab的帮助文档

    展开全文
  • 由于OpenCV本身只支持 xml、yml 的数据文件...我们可以通过以下方式视差数据保存txt文件,再导入到Matlab中。 void saveDisp(const char* filename, const Mat&amp; mat) { FILE* fp = fopen(filen...
  • 2.从txt文件中读数据到MATLAB并将图像显示出来。 第一句是加载数据, 第二句是将数据以256*256矩阵显示,因为这个图像像素就是256*256 这里我用的一副图作为例子显示的 引用的话请注明出处。
  • Matlab将mat文件保存txt文件 1. 使用dlmwrite函数实现 将矩阵M写入文件'myFile.txt',用制表位字符分隔并使用 3 位数精度。 dlmwrite('myFile.txt',M,'delimiter','\t','precision',3) 可以查看文件中的数据...
  • fid为文件句柄,若缺省,则输出屏幕 format用来指定数据输出时采用的格式 %d 整数 %e实数:科学计算法形式 %f实数:小数形式 %g由系统自动选取上述两种格式之一 %s输出字符串 简单应用 代码:(repmat是...
  • 怎样将matlab中的数据导入到excel中1、首先打matlab,新建窗口。2、在matlab中生成数据,并且写入到excel文件中体代码如下图所示。3、下面一下生成的myExample.xlsx文件里面是否...matlab怎么把计算的数据保存到exc...
  • //串口采集的串行数据存成.txt文件用作matlab数据分析 PrintWriter output; void setup() { // Create a new file in the sketch directory output = createWriter("positions.txt"); } void draw() { //d ...
  • 一:存txt文件,用dlmwrite()dlmwrite一个矩阵写由分隔符分割的文件中。在保存整数文件时使用save存为ascii文件时,常常是文件里都是实型格式的数据(有小数点,和后面很多的0,看着很不方便)。于是要保存此类...
  • 需要对这些数据进行处理,比如形成曲线,或者放到matlab中进行数据分析,如果每次接收之后,都从接收的文本框中进行拷贝,感觉挺麻烦的,针对这个需求给串口添加一个功能,可以手动将数据保存到txt文件中,通过这样...
  • 文件写入方法 问题提出:现在要保存程序的输出结果,包括...想把这些量保存txt文件中。   save 函数 工作空间中的变量写入文件,导出mat文件中。   1. 调用dlmwrite函数 dlmwrite(filename,M) dlmwrite(filename,
  • 在日常办公中,有许多软件保存的文件格式往往都是txt文本格式,那我们应该如何这些内容导入Word中并排序好呢?直接复制?如果你是一些文本内容,直接复制肯定没问题。但如果是数据类型的,那直接复制Word就会...
  • matlab保存数据

    2014-05-21 20:26:00
    保存整数文件时使用save存为ascii文件时,常常是文件里都是实型格式的数据(有小数点,和后面很多的0,看着很不方便)。于是要保存此类数据时,我们可以使用此dlmwrite命令。 使用方法: dlmwrite('filename...
  • matlab数据保存的相关指令

    千次阅读 2016-06-08 15:25:26
    保存整数文件时使用save存为ascii文件时,常常是文件里都是实型格式的数据(有小数点,和后面很多的0,看着很不方便)。于是要保存此类数据时,我们可以使用此dlmwrite命令。 使用方法: dlmwrite('filename...
  • 假设data_o为256bit位宽的数据,现需要保存到txt文件中,每行保存一个有效数据,valid_o为其对应的有效标志信号。 wire valid_o ;//待保存数据有效标志信号,高电平有效 wire [255:0] data_o ;//待...
  • 展开全部第一种方法:save(最简单基本的)具体的命令...*.txt为文件名,该文件存储于当前工作目录下,再打开就可以 打开后,数据有可能是以指数形式保存的.)例子:a =[17 24 1 8 15;23 5 7 14 16 4 6 13 20 22...
  • matlab处理txt文件数据

    千次阅读 2018-05-17 11:20:46
    read_txtfile.,mclear close all clc %load函数一般用来导入纯数字的文件,可以是文本格式的文件... %.txt数据读入到matlab工作空间 [m,n]=size(position); %获得数据矩阵的大小 j=1; sumx=0; sumy=0; for i...
  • 小编是欧拉角与gps数据时间戳对齐后保存到txt文档里,然后通过matlab读取数据画空间运动轨迹及欧拉角变化折线图 时间戳对齐 //message_filters::Subscriber<sensor_msgs::PointCloud2> points_sub(n, "/...
  • 首先想要用一个循环读取txt数据,假设txt数据保存的名字为'8-1.txt','8-2.txt',...,并将数据保存在一个数组中,以读取4组数据为例,实现数组的纵向拼接,程序实现如下: data=[]; for i=1:4 fileName = ['8-' num2...
  • ladies and 乡亲们,大家好。...一、导入txt数据步骤一,所用到的文件放入matlab的当前文件中步骤二,输入以下代码a=load ('sj.txt')即可将txt中的数据保存到变量a中 二、导图excel数据excel中的数据可...
  • 保存整数文件时使用save存为ascii文件时,常常是文件里都是实型格式的数据(有小数点,和后面很多的0,看着很不方便)。于是要保存此类数据时,我们可以使用此dlmwrite命令。 使用方法: dlmwrite('filename...
  • 文本文件(.txt)中的数据导入到matlab中一例山东水利职业学院王为洪247128324@http://www.doczj.com/doc/5d97a7dfad51f01dc281f1fd.html文本文件fj.txt保存数据为:X 1000 Y 243600X -10000 Y 301000X -100200 ...
  • matlab将下面一行复制命名行,将X替换成要保存的变量;fileID = fopen('data.txt','w');for i=1:length(X) fprintf(fileID,'%d\t',X(i));end;fclose(fileID);将data.txt复制VC工程下,LEN是da

空空如也

空空如也

1 2 3 4 5 6
收藏数 104
精华内容 41
关键字:

matlab将数据保存到txt

matlab 订阅