精华内容
下载资源
问答
  • pc 上,包装器将简单地调用 xlsread / xlswrite,但在 mac 或 unix 平台上将读取开放文档格式 (ODF) 电子表格,例如由 Open Office 保存的电子表格。 包装器使用来自 ODFDOM 项目的 java 命令,该项目提供用于...
  • Matlab学习手记】文件读写完整版

    万次阅读 多人点赞 2018-08-11 09:54:04
    介绍Matlab读写文本文件的方法,包括load、dlmread、csvread、importdata、textscan、dlmwrite、csvwrite、save等函数的用法。 读文件 1. 纯数字 load test.txt % 导入文本数据,并保存在 test 变量; x= ...

    介绍Matlab读写文本文件的方法,包括load、dlmread、csvread、importdata、textscan、dlmwrite、csvwrite、save等函数的用法。

    读文件

    • 1. 纯数字

    load test.txt % 导入文本数据,并保存在 test 变量;
    
    x= load('test.txt') % 导入文本数据,并保存到x变量;
    • 2. 科学计数法数字

    x = load('test.txt')
    
    x = dlmread('test.txt')
    • 3. 符号隔开的数字

    x= load('test.txt')     % 同一种符号隔开
    
    x = dlmread('test.txt')    % 同一种符号隔开
    
    x = csvread('test.txt')    % 多种符号隔开
    • 4. 包含头信息

    x = importdata('test.txt')

            x.data % 查看读取的数值型数据

            x.textdata % 查看读取的文本数据

            返回结构体变量、分隔符、头文件行数:

    [x, s, h] = importdata('examp02_07.txt');

            逗号作为分隔符,设置读取初始位置:

    x = dlmread('test.txt', ',', 2, 0)

            空格作为分隔符,头文件信息 2 行 :

    x = importdata('examp02_08.txt',' ',2)

     

    • 5. 文字数字文字数字混排

            

     

    fid = fopen('test.txt','r');    % 以只读方式打开
    line1 = fgets(fid);    % 读取文件的第1行
    line2 = fgets(fid);    % 读取文件的第2行
    % 从第3行开始读取数据,将读取的相同数据类型的连续元胞连接成一个元胞数组
    A = textscan(fid, '%f %f %f', 'CollectOutput', 1)
    line6 = fgets(fid);    % 读取文件的第6行
    line7 = fgets(fid);    % 读取文件的第7行
    B = textscan(fid, '%f %f %f', 'CollectOutput', 1)
    fclose(fid);
    
    
    fid = fopen('test.txt', 'r');
    C_data = textscan(fid, '%f%f%f', 'HeaderLines', 2);  % 从第3行开始读
    fclose(fid);

     

    • 6. 不整齐数字

    x = dlmread('test.txt')  % 用 0 补齐
    • 7. 复数

            

    x = dlmread('test.txt')
    
    fid = fopen('test.txt', 'r');    
    A = textscan(fid, '%f %*s %f %*s','delimiter',' ', 'CollectOutput', 1)
    fclose(fid);  
    • 8. 日期

    file_content= importdata('test.txt')    % 返回字符串元胞数组
    file_content= char(file_content)    % 将字符串元胞数组转为字符矩阵
    t = str2num(FileContent(:, 8:9))    % 提取字符矩阵的第8至9列,并转为数字
    
    fid = fopen('test.txt', 'r');   
    % 用'-,:'作分隔符
    A = textscan(fid, '%d %d %d %d %d %f %*s','delimiter','-,:','CollectOutput',1)
    fclose(fid);  
    • 9. 字符数字混排

    fid = fopen('test.txt');
    C = textscan(fid, '%s %s %f32 %d8 %u %f %f %s')    % 以指定格式读取文件中数据
    fclose(fid); 

    fid = fopen('test.txt', 'r');  
    A = textscan(fid, '%s %s %s %d %s %d %s %d %s', 'delimiter', ' ')
    fclose(fid); 
    
    fid = fopen('examp02_11.txt','r');  
    A = textscan(fid, '%*s %*s %*s %d %*s %d %*s %d %*s', 'delimiter', ' ','CollectOutput', 1)
    fclose(fid);

    写文件

    • 1. 写复数

    x = [1.455390 + 1.360686i, 8.692922 + 5.797046i; 3.509524 + 5.132495i, 4.018080 + 0.759667i];
    % 用逗号(',')作分隔符,用'\r\n'作换行符
    dlmwrite('test.txt', x, 'delimiter', ',', 'newline', 'pc')
    
    x = 10*rand(2, 6);
    fid = fopen('test.txt','wt');
    fprintf(fid,'%f+%fi, %f+%fi\n', x);
    fclose(fid);
    • 2. 写数字

    x = 10000*rand(3, 2);  
    fid = fopen('test.txt', 'wt');  
    fprintf(fid,'%f    %f    %f\n', x);  % 注意:文件里排布为2行3列,即行优先
    %fprintf(fid,'%e  %e  %e\n', x);
    fclose(fid);  
    
    空一行:dlmwrite('test.txt', x, '-append', 'roffset', 1, 'delimiter', ' ');
    分隔符:dlmwrite('test.txt', x, 'delimiter', '\t', 'precision', '%8.4f');
    分隔符:dlmwrite('test.csv', x, 'delimiter', ',', 'precision', '%8.4f', 'newline', 'pc');
    dlmwrite函数自动补零对齐;
    
    csvwrite('csvlist.dat', x);  % 逗号隔开 
    
    保存数据、间隔tabs宽度、追加数据:
    a=rand(5);
    save('a.txt','a','-ascii');  
    save('a.txt','a','-ascii','-tabs');  
    save('a.txt','a','-append','-ascii','-tabs');
    • 3. 随便写啥

    fid=fopen(Fid_FilePath,'wt');
    fprintf(fid,'%s\n',Fid_Header); % 写字符串
    fprintf(fid,'%10.4f  %10.4f  %10.4f  %10.4f\n', Data_Fid);  % 写数字
    fclose(fid);
    • 4. 追加续写

    w = 10*rand(1, 4); 
    x = 10*rand(1, 3);  
    y = 10*rand(1, 2);  
    z = 10*rand; 
    fid = fopen('test.txt', 'at');   
    fprintf(fid, '%-f    %-f    %-f    %-f\n', w);
    fprintf(fid, '%-f    %-f    %-f\n', x);
    fprintf(fid, '%-f    %-f\n', y);
    fprintf(fid, '%-f\n', z);
    fclose(fid);
    • 实例

        以下是待写入内容:

    Title = Peak File
    Num of Peaks = 2048
    Time(ms)   --   Amplitude--       Real  --     Imag
    0.0000  36061.1716 -31236.0000  18020.0000
    0.0500  36075.8757 -31327.0000  17891.0000
    0.1000  36169.9271 -31501.0000  17775.0000
    0.1500  36114.7887 -31541.0000  17591.0000

        代码如下:

    Title = 'Title = Peak File';
    Num = ['Num of Peaks =' num2str(length(Module))];
    Name = 'Time(ms)   --   Amplitude--       Real  --     Imag';
    [filename, pathname] = uiputfile('*.ddd');   % 随便一个后缀名
    FileName = [pathname, filename];
    dlmwrite(FileName, Title, 'delimiter', '')   % 不加 append 以覆盖同名文件
    dlmwrite(FileName, Num, '-append', 'delimiter', '')    % 追加续写
    dlmwrite(FileName, Name, '-append', 'delimiter', '')
    dlmwrite(FileName, [SampleTime, Module, DataReal, DataImaginary], '-append', 'delimiter', '\t', 'precision', '%.4f')

     

    展开全文
  • matlab对文本文件读写

    千次阅读 2019-08-13 15:21:46
    介绍Matlab读写文本文件的方法,包括load、dlmread、csvread、importdata、textscan、dlmwrite、csvwrite、save等函数的用法。 读文件 1. 纯数字 load test.txt % 导入文本数据,并保存在 test 变量; ...

    https://blog.csdn.net/u012366767/article/details/81565427

    介绍Matlab读写文本文件的方法,包括load、dlmread、csvread、importdata、textscan、dlmwrite、csvwrite、save等函数的用法。
    读文件
    1. 纯数字
    load test.txt % 导入文本数据,并保存在 test 变量;
     
    x= load('test.txt') % 导入文本数据,并保存到x变量;
    2. 科学计数法数字
    x = load('test.txt')
     
    x = dlmread('test.txt')
    3. 符号隔开的数字
    x= load('test.txt')     % 同一种符号隔开
     
    x = dlmread('test.txt')    % 同一种符号隔开
     
    x = csvread('test.txt')    % 多种符号隔开
    4. 包含头信息
    x = importdata('test.txt')
            x.data % 查看读取的数值型数据

            x.textdata % 查看读取的文本数据

            返回结构体变量、分隔符、头文件行数:

    [x, s, h] = importdata('examp02_07.txt');
            逗号作为分隔符,设置读取初始位置:

    x = dlmread('test.txt', ',', 2, 0)
            空格作为分隔符,头文件信息 2 行 :

    x = importdata('examp02_08.txt',' ',2)
     

    5. 文字数字文字数字混排
            

     

    fid = fopen('test.txt','r');    % 以只读方式打开
    line1 = fgets(fid);    % 读取文件的第1行
    line2 = fgets(fid);    % 读取文件的第2行
    % 从第3行开始读取数据,将读取的相同数据类型的连续元胞连接成一个元胞数组
    A = textscan(fid, '%f %f %f, 'CollectOutput', 1)
    line6 = fgets(fid);    % 读取文件的第6行
    line7 = fgets(fid);    % 读取文件的第7行
    B = textscan(fid, '%f %f %f', 'CollectOutput', 1)
    fclose(fid);
    fid = fopen('test.txt', 'r');
    C_data = textscan(fid, '%f%f%f', 'HeaderLines', 2);  % 从第3行开始读
    fclose(fid);
     

    6. 不整齐数字


    x = dlmread('test.txt')  % 用 0 补齐
    7. 复数
            

    x = dlmread('test.txt')
     
    fid = fopen('test.txt', 'r');    
    A = textscan(fid, '%f %*s %f %*s','delimiter',' ', 'CollectOutput', 1)
    fclose(fid);  
    8. 日期


    file_content= importdata('test.txt')    % 返回字符串元胞数组
    file_content= char(file_content)    % 将字符串元胞数组转为字符矩阵
    t = str2num(FileContent(:, 8:9))    % 提取字符矩阵的第8至9列,并转为数字
     
    fid = fopen('test.txt', 'r');   
    % 用'-,:'作分隔符
    A = textscan(fid, '%d %d %d %d %d %f %*s','delimiter','-,:','CollectOutput',1)
    fclose(fid);  
    9. 字符数字混排


    fid = fopen('test.txt');
    C = textscan(fid, '%s %s %f32 %d8 %u %f %f %s')    % 以指定格式读取文件中数据
    fclose(fid); 


    fid = fopen('test.txt', 'r');  
    A = textscan(fid, '%s %s %s %d %s %d %s %d %s', 'delimiter', ' ')
    fclose(fid); 
     
    fid = fopen('examp02_11.txt','r');  
    A = textscan(fid, '%*s %*s %*s %d %*s %d %*s %d %*s', 'delimiter', ' ','CollectOutput', 1)
    fclose(fid);
    写文件
    1. 写复数
    x = [1.455390 + 1.360686i, 8.692922 + 5.797046i; 3.509524 + 5.132495i, 4.018080 + 0.759667i];
    % 用逗号(',')作分隔符,用'\r\n'作换行符
    dlmwrite('test.txt', x, 'delimiter', ',', 'newline', 'pc')
     
    x = 10*rand(2, 6);
    fid = fopen('test.txt','wt');
    fprintf(fid,'%f+%fi, %f+%fi\n', x);
    fclose(fid);
    2. 写数字
    x = 10000*rand(3, 2);  
    fid = fopen('test.txt', 'wt');  
    fprintf(fid,'%f    %f    %f\n', x);  % 注意:文件里排布为2行3列,即行优先
    %fprintf(fid,'%e  %e  %e\n', x);
    fclose(fid);  
     
    空一行:dlmwrite('test.txt', x, '-append', 'roffset', 1, 'delimiter', ' ');
    分隔符:dlmwrite('test.txt', x, 'delimiter', '\t', 'precision', '%8.4f');
    分隔符:dlmwrite('test.csv', x, 'delimiter', ',', 'precision', '%8.4f', 'newline', 'pc');
    dlmwrite函数自动补零对齐;
     
    csvwrite('csvlist.dat', x);  % 逗号隔开 
     
    保存数据、间隔tabs宽度、追加数据:
    a=rand(5);
    save('a.txt','a','-ascii');  
    save('a.txt','a','-ascii','-tabs');  
    save('a.txt','a','-append','-ascii','-tabs');
    3. 随便写啥
    fid=fopen(Fid_FilePath,'wt');
    fprintf(fid,'%s\n',Fid_Header); % 写字符串
    fprintf(fid,'%10.4f  %10.4f  %10.4f  %10.4f\n', Data_Fid);  % 写数字
    fclose(fid);
    4. 追加续写
    w = 10*rand(1, 4); 
    x = 10*rand(1, 3);  
    y = 10*rand(1, 2);  
    z = 10*rand; 
    fid = fopen('test.txt', 'at');   
    fprintf(fid, '%-f    %-f    %-f    %-f\n', w);
    fprintf(fid, '%-f    %-f    %-f\n', x);
    fprintf(fid, '%-f    %-f\n', y);
    fprintf(fid, '%-f\n', z);
    fclose(fid);
    实例
        以下是待写入内容:

    Title = Peak File
    Num of Peaks = 2048
    Time(ms)   --   Amplitude--       Real  --     Imag
    0.0000  36061.1716 -31236.0000  18020.0000
    0.0500  36075.8757 -31327.0000  17891.0000
    0.1000  36169.9271 -31501.0000  17775.0000
    0.1500  36114.7887 -31541.0000  17591.0000
        代码如下:

    Title = 'Title = Peak File';
    Num = ['Num of Peaks =' num2str(length(Module))];
    Name = 'Time(ms)   --   Amplitude--       Real  --     Imag';
    [filename, pathname] = uiputfile('*.ddd');   % 随便一个后缀名
    FileName = [pathname, filename];
    dlmwrite(FileName, Title, 'delimiter', '')   % 不加 append 以覆盖同名文件
    dlmwrite(FileName, Num, '-append', 'delimiter', '')    % 追加续写
    dlmwrite(FileName, Name, '-append', 'delimiter', '')
    dlmwrite(FileName, [SampleTime, Module, DataReal, DataImaginary], '-append', 'delimiter', '\t', 'precision', '.4f')
     
     

    展开全文
  • %读取文件 fid_2=fopen('rcv_data.txt', 'r'); %总共10000个 x=10000;y=4; data_5=cell(x,y);%定义cell矩阵,存储文件内容 data_6=cell(x,y); data_7=cell(x,1);%高16位 (16进制) data_8=cell(x,1);%低16位 (16...

    目录

    应用背景:

    程序实现:

    测试:

     注意事项:


    应用背景:

            Zynq控制高速高精度ADC(ADS62P49)完成模数转换功能,并将采集的大批量数据(100000x14x2bit)通过DMA传输至DDR3,而后经过网口传输至PC机做后续处理。

             Zynq-LWIP上行传输大批量数据方法说明:https://blog.csdn.net/m0_37779673/article/details/117993851

            在PC中,最基础的信号处理是信号显示与FFT频谱分析,因此本文给出MATLAB读取TXT数据文件的画图与频谱分析。

    程序实现:

    %读取文件
    fid_2=fopen('rcv_data.txt', 'r'); %总共10000个
    x=10000;y=4;
    data_5=cell(x,y);%定义cell矩阵,存储文件内容
    data_6=cell(x,y);
    data_7=cell(x,1);%高16位 (16进制)
    data_8=cell(x,1);%低16位 (16进制)
    for i=1:x
        for j=1:y
            data_5{i,j}=fscanf(fid_2,'%s',[1,1]);%以字符方式读取每个值,遇空格完成每个值的读取
        end
    end
    fclose (fid_2);
    
    for i=1:x %交换顺序
        data_6{i,1}=data_5{i,4};
        data_6{i,2}=data_5{i,3};
        data_6{i,3}=data_5{i,2};
        data_6{i,4}=data_5{i,1};
    end    
    for i=1:x %两个分开
        data_7{i,1}=[data_6{i,1},data_6{i,2}];
        data_8{i,1}=[data_6{i,3},data_6{i,4}];
    end
    for i=1:x %
        data_7{i,1}=hex2dec(data_7{i,1});%将文本格式转为数字格式
        data_8{i,1}=hex2dec(data_8{i,1});%将文本格式转为数字格式
    end
    data_9 = cell2mat(data_7)-8192;
    data_10 = cell2mat(data_8)-8192;
    
    %画图
    t1=10:500
    figure(1)
    plot(t1,data_9(t1,1));
    
    hold on
    
    plot(t1,data_10(t1,1));
    
    % SNR_ADC(data_9,14);
    
    % %fft_i
    Fs = 200000000 ;  % 采样频率200M
    N_i = length(data_9); %样点个数
    fft_i = fft(data_9,N_i);
    P2_i = abs(fft_i/N_i);
    P1_i = P2_i(1:N_i/2+1);
    P1_i(2:end-1) = 2 * P1_i(2:end-1);
    dBm_i = 10 + 20 * log10( 0.5 * (P1_i/1000) );
    f_i=(Fs*(0:(N_i/2))/N_i)/1000000;
    % 
    figure(3);
    %(x-1)/x*fs
    plot(f_i,dBm_i);
    title('信号频谱');
    xlabel('f/MHz');
    ylabel('功率/dBm');
    % 
    % %fft
    Fs = 200000000 ;  % 采样频率200M
    N_q = length(data_10); %样点个数
    fft_q = fft(data_10,N_q);
    P2_q = abs(fft_q/N_q);
    P1_q = P2_q(1:N_q/2+1);
    P1_q(2:end-1) = 2 * P1_q(2:end-1);
    dBm_q = 10 + 20 * log10( 0.5 * (P1_q/1000) );
    f_q=(Fs*(0:(N_q/2))/N_q)/1000000;
    
    figure(4);
    %(x-1)/x*fs
    plot(f_q,dBm_q);
    title('信号频谱');
    xlabel('f/MHz');
    ylabel('幅度');
    

    测试:

            测试ADC单通道接收功能时,由射频信号源输出10MHz的正弦波,PC机接收数据通过MATLAB观察接收波形及频谱分析。

     ADC采集50MHz正弦波信号的上行传输数据

     注意事项:

            ADC采集数据为有符号数,但MATLAB的plot(t1,data_9(t1,1));函数处理需要无符号数,因此在FPGA采集过程中最好对采集数据做无符号数的转换!!!!!(MATLAB中也可以做转换,但个人尝试,感觉比FPGA中处理要麻烦,所以建议在FPGA中做转换)

    展开全文
  • Matlab的各种数据读取文件读写等操作汇总

    万次阅读 多人点赞 2019-06-18 20:43:26
    Matlab的各种数据读取文件读写等操作汇总 MATLAB提供了多种方式从磁盘读入文件或将数据输入到工作空间,即读取数据,又叫导入数据;将工作空间的变量存储到磁盘文件中称为存写数据,又叫导出数据。至于选择哪种...

    Matlab的各种数据读取、文件读写等操作汇总

        MATLAB提供了多种方式从磁盘读入文件或将数据输入到工作空间,即读取数据,又叫导入数据;将工作空间的变量存储到磁盘文件中称为存写数据,又叫导出数据。至于选择哪种机制,则根据下面两个因素决定:

    ● 用户所执行的操作是导入数据还是导出数据;

    ● 数据的格式为文本格式、二进制格式还是如HDF之类的标准格式。

    将数据导入MATLAB中最容易的方法就是使用导入数据模板(Import Wizard),使用该模板时不需要知道数据的格式,只需指定包含这些数据的文件,然后导入模板会自动处理文件内容。本章重点内容如下:

    ● 文件的打开和关闭

    ● 文本文件的读取

    ● 存写ASCII数据

    ● 二进制数据的读取

    ● 二进制数据的存写

    ● 使用I/O文件函数进行数据读写

    ● MAT 文件的读写

     

    2.1  文件的打开和关闭

    2.1.1  文件的打开

        无论是要读写ASCII码文件还是二进制文件,都必须先用fopen函数将其打开,在默认情况下,fopen以二进制格式打开文件,它的使用语法如下:

       fopen ('filename', 'mode')

    其中filename表示要读写的文件名称,mode则表示要对文件进行的处理方式,如下:

    rt:以只读方式(Reading)打开文件

    wt:以只写方式(Writing)打开文件

    at:以追加方式(Appending)打开文件,新内容将从原文件后面续写

    r+t:以同时读写方式打开文件

    w+t:以同时读写创建文件,原文件内容被清除

    a+t:以同时读和追加(Reading and Appdending)方式,原文件内容被保留,新内容将从原文件的后面开始

    At:以读写方式打开或创建文件,适用于对磁带介质文件的操作

    Wt:以写入方式打开或创建文件,原文件内容被清除,适用于磁带介质文件的操作

     

        fopen函数有两个返回值,一个是返回一个文件标志(file Identifier),它会作为参数被传入其他对文件进行读写操作的命令,通常是一个非负的整数,可用此标识来对此文件进行各种处理。如果返回的文件标识是–1,则代表fopen无法打开文件,其原因可能是文件不存在,或是用户无法打开此文件权限。另一个返回值就是message,用于返回无法打开文件的原因。为了安全起见,最好在每次使用fopen函数时,都测试其返回值是否为有效值。下面以脚本m文件为例来声明文件的打开。

    例2-1  %exam1.m

    [f,message]=fopen('fileexam1', 'r')

    if f==-1

    disp (message);   %显示错误信息

    end

    若文件fileexam1不存在,则显示如下信息。

    Cannot open file.existence?permissions?memory?...

     

    例2-2  %exam2.m

    [f,message]=fopen('fileexam2', 'r');

    if f==-1

    disp (message);    %显示错误信息

     else

       disp(f);

    end

    若文件fileexam2存在,则返回f值。

     

    2.1.2  文件的关闭

    一旦完成文件的读写,最好关闭文件,以便对其进行其他操作。这时就可以使用fclose函数来关闭文件,其适用语法如下:fclose(f)。

    其中f为打开文件的标志,若fclose函数返回值为0,则表示成功关闭f标志的文件;若返回值为–1,则表示无法成功关闭该文件。一般来说,在完成对文件的读写操作后就应关闭它,以免造成系统资源浪费。此外,需注意的是,打开和关闭文件都比较耗时,因此为了提高程序执行效率,最好不要在循环体内使用文件。

    若要一次关闭打开的所有文件,可以使用下面的命令:fclose all

     

    2.2  文本数据

    虽然MATLAB自带的MAT文件为二进制文件,但为了便于和外部程序进行交换以及方便查看文件中的数据,也常常采用文本数据格式与外界进行数据交换。在文本格式中,数据采用ASCII码格式,可以表示字母和数字字符。ASCII文本数据可以在文本编辑器中查看和编辑。MATLAB提供多种函数能够进行文件读写,这些函数都是MATLAB的一部分,不需要额外的工具箱支持。

    2.2.1  从文本文件中读取数据

    1.使用导入模板来读取数据

    使用导入模板来读取数据,需按以下步骤进行:

    (1) 选择File→Import Data选项,然后弹出一个文件选择对话框;也可以使用uiimport函数来打开导入数据模板。

    (2) 在文件选择对话框中选择想导入数据的文本文件,然后单击Open按钮,导入数据模板就会打开该文件并准备处理其内容。

    (3) 指定用于分开单个数据的字符,该字符称为分隔符或列分隔符。在多数情况下可以用导入模板来设定分隔符。

    (4) 选择要导入的变量。在默认情况下,导入模板将所有的数值数据放在一个变量中,而将文本数据放在其他变量中。

    (5) 单击Finish按钮完成数据的导入。

    当使用导入模板来打开一个文本文件时,在导入模板对话框的预览区仅显示原始数据的一部分,通过它,用户可以验证该文件中的数据是否为所期望的。导入模板也根据文件中的数据分隔符来对导入的数据进行预处理。在导入模板中打开工作区中的grade.txt文件。

       english  math  physic

    joe        80    90      60

    susan        78    98      88

    rob        67    90      89

     

    图2-1  将数据通过模板导入

    在图2-1中,导入模板已辨认space字符,把它作为文件中数据的分隔符,并建立了两个变量:data(包含文件中所有数值数据)和textdata(包含文件中所有文本数据)。

    当导入模板正确导入文件中的数据后,就会显示它所建立的变量。要选择一个变量来导入数据,可单击它名称后面的复选框。在默认情况下,所有变量都会被选中。在导入对话框的右面显示了导入模板建立的变量内容。要查看其他变量,只需要单击该名称。在选择好要导入的变量后,单击Next按钮,如图2-2所示。

     

    图2-2  使用模板查看各变量数据

    在默认情况下,导入模板将文件中所有的数值数据放在一个变量中;若文件包含文本数据,则模板将它们放在另外一个变量中;若文件包含行或列,模板也将它们作为各自独立的变量分别称为行头和列头。

    当所有导入模板创建好数据后,使用whos命令可以查看工作空间的变量。

    >> whos

     

     Name              Size            Bytes      Class     Attributes

     

     data              3x3             72      double              

     textdata              4x1             314      cell  

     

    2. 使用函数来读取文本数据

    若要在命令行或在一个 M 文件中读取数据,必须使用 MATLAB 数据函数,函数的选择则是依据文本文件中数据的格式。而且文本数据格式在行和列上必须采取一致的模式,并使用文本字符来分隔各个数据项,称该字符为分隔符或列分隔符。分隔符可以是space、comma、semicolon、ab或其他字符,单个的数据可以是字母、数值字符或它们的混合形式。

    文本文件也可以包含称之为头行的一行或多行文本,或可以使用文本头来标志各列或各行。在了解要输入数据的格式之后,便可以使用 MATLAB 函数来读取数据了。若对 MATLAB 函数不熟悉,可从表2-2中了解几个读取函数的一些使用特征。

    表2-2  读取函数的比较

    函    数 |数 据 类 型 |分  隔  符 返  回  值

    csvread |数值数据|仅cooma|1

    dlmread|数值数据|任何字符|1

    fscanf|字母和数值|任何字符|1

    load|数值数据|仅space|1

    textread|字母和数值|任何字符|多返回值

     

    3. 读取数值文本数据

    若用户的数据文件只包含数值数据,则可以使用许多MATLAB函数,这取决于这些数据采用的分隔符。若数据为矩形形状,也就是说,每行有同样数目的元素,这时可以使用最简单的命令load(load也能用于导入MAT文件,该文件为用于存储工作空间变量的二进制文件,如果文件名后缀是.dat,则MATLAB会以MAT文件格式进行读取)。

    例如,文件my_data.txt包含了两行数据,各数据之间由space字符隔开。

    当使用load时,它将读取数据并在工作空间中建立一个与该文件同名的变量,但不包括扩展名。

    >>load my_data.txt;

    调用whos命令查看工作空间的变量。

    >> whos

     

     Name              Size            Bytes          Class     Attributes

     

     data              3x3              72          double              

     my_data          3x4              96         double              

     textdata              4x1              314          cell  

    此时可以查看与该文件同名的变量的值

    >> my_data

     

    my_data =

     

       0.3242    0.4324    0.3455    0.6754

       0.4566    0.9368    0.9892    0.9274

       0.4658    0.2832    0.9373    0.8233

    若想将工作空间的变量以该文件名命名,则可以使用函数形式的load,下面的语句将文件导入工作空间并赋给变量A

    A=load('my_data.txt');

     

    4. 读取有分隔符的ASCII数据文件

    如果数据文件不使用空格符而是使用逗号或是其他符号作为分隔符,用户可以选择多个可用的导入数据函数。最简单的便是使用函数dlmread。

    举个例子来说,一个名为lcode.dat的数据文件,数据内容由逗号分隔。

    0.3445,0.8433,0.7865

    0.7562,0.4233,0

    要把该文件的全部内容读入阵列A,只须输入如下命令:

    >> A=dlmread('lcode.dat',',')

    即可以把数据文件中使用的分隔符作为函数dlmread的第二个参数。

    注意:

    即使每行的最后一个数据后面不是逗号,dlmread函数仍能正确读取数据,因为dlmread忽略了数据之间的空格符。因此,即使数据为如下格式,前面的dlmread命令仍能正常工作。

    A =

     

       0.3445    0.8433    0.7865

       0.7562    0.4233         0

    另外需要注意的是,分隔符只能选取单个字符,不能用字符串来作为分隔符。

     

    5. 使用文本头读取数值数据

    要读取一个包含文本头的ASCII码数据文件,可以使用textread函数,并指定头行参数。调用函数textread 同样非常简单,同时对文件读取的格式处理能力更强,函数接收一组预先定义好的参数,由这些参数来控制变量的不同方面。Textread既能处理有固定格式的文件,也可以处理无格式的文件,还可以对文件中每行数据按列逐个读取。

    textread函数常见的调用方法有如下几种:

    [A,B,C...]=textread('filename', 'format')

    [A,B,C...]=textread('filename', 'format',N)

    例如文件my_data.txt包含了如下文件内容,有一行文本头,且格式化的数值数据。

    num1    num2    num3    num4

    0.3242  0.4324  0.3455  0.6754

    0.4566  0.9368  0.9892  0.9274

    0.4658  0.2832  0.9373  0.8233

    因为有文件头,要使用如下textread命令来读取文件中的数据。

    >> [num1 num2 num3 num4]=textread('my_data.txt','%f %f %f %f','headerlines',1)

    执行结果如下:

    num1 =

     

       0.3242

       0.4566

       0.4658

     

     

    num2 =

     

       0.4324

       0.9368

       0.2832

     

     

    num3 =

     

       0.3455

       0.9892

       0.9373

     

     

    num4 =

     

       0.6754

       0.9274

       0.8233

     

    6. 读取字母数值混合的数据

    若数据文件中包含了字母和数值混合的ASCII码数据,也可以使用函数textread来读取数据。由上一小节知道,函数textread可以返回多个输出变量,实际上用户还可以通过参数指定每个变量的数据类型。

    例如要把文件my_exam.dat的全部内容读入工作空间,需要在textread行数的输入参数中指定数据文件的名称和格式。

    文件my_exam.dat包含的混合的字母和数值如下:

    Joe    gradeA  4.9  pass

    susan  gradeD  2.0  fail

    如果想把4列数据全部读取出放在4个变量中,则使用如下命令:

    >> [name  gra  grades  answer]=textread('my_exam.dat','%s %s %f %s')

    在这里要注意命令中格式字符串的定义,对于格式字符串中定义的每种变换,必须指定一个单独的输出变量,textread 函数按格式字符串中指定的格式处理文件中的某个数据项,并把值放在输出变量中。输出变量的数目必须和格式字符串中指定的变换数目项匹配,在该例中,函数按格式字符串来读取文件my_exam.dat的每一行,直到文件读完,该命令的执行结果是:

    name =

     

       'Joe'

       'susan'

     

     

    gra =

     

       'gradeA'

       'gradeD'

     

    grades =

     

       4.9000

       2.0000

     

     

    answer =

     

       'pass'

       'fail

    另外,textread函数可以有选择地读取数据,比如我们不需要取出中间几列数据,只取出第一列和最后一列数据,则可以使用命令:

    >> [name   answer]=textread('my_exam.dat','%s %*s %*f %s')

     

    name =

     

       'Joe'

       'susan'

     

    answer=

     

       'pass'

       'fail'

    若文件采用的分隔符不是空格,则必须使用函数textread ,将该分隔符作为它的参数。例如,若文件my_exam.dat 使用分号作为分隔符,则读入该文件需使用如下命令:

    [name  gra  grades  ans]=textread('my_exam.dat','%s %s %f %s', 'delimiter', '; ')

    2.2.2  存写ASCII码数据

    本小节介绍如何使用MATLAB函数按几种通用的ASCII码格式来存写数据,即如何使用这些函数来把一个MATLAB数值矩阵写入到一个文本文件中,其中该矩阵的列和行使用空格符来分隔。用户采用什么函数取决于所要存写数据的数据量和数据格式。

    常用的两种ASCII码数据格式如下:

    ● 采用空格符分隔;

    ● 采用分号分隔。

    MATLAB的存写数据函数如表2-3所示。

    表2-3  数据存写函数

    函 数 名 称|适 用 数 据|分  隔  符

    csvwrite|数值数据|逗号

    diary|数值数据或单元阵列|空格

    dlmwrite|数值数据|任何字符

    fprintf|字母和数值数据|任何字符

    save|数值数据|制表符或空格符

     

    1. 存写有分隔符的ASCII码数据文件

    若要将当前的MATLAB工作空间的一个或多个变量写到一个有分隔符的ASCII码文件中,可以使用save命令或dlmwrite函数。在默认情况下,save命令是以 MAT 格式存写数据的,这部分内容我们在后面详细介绍,本小节主要介绍 save命令通过ASCII码限定符以文本方式存写数据。而dlmwrite函数则可以提供更大的灵活性,它允许用户把任何字符指定为分隔符,也可以通过指定一个值域存写一个阵列的子阵列。

    >> clear all;

    >> x=rand(2,3);

    >> save my_test1.dat x -ascii;

    该命令将变量x中的数据存写到my_test1.dat文件中。通过文本编辑器,我们可以查看该文件的内容:

     9.2181297e-001  1.7626614e-001  9.3546970e-001

     7.3820725e-001  4.0570621e-001  9.1690444e-001

    我们也可以将命令中的文件名和变量名省略,那样的话,命令的执行结果则是把当前 MATLAB工作空间中的所有变量保存到matlab.mat文件中。需要指明的是这时的文件虽然后缀名为.mat,但文件内容仍然是以文本方式保存的。

    在默认情况下,save命令使用空格作为分隔符,但用户可以通过指定-tabs限定符来使用制表符而不是空格符作为分隔符。当使用save命令把一个字符阵列写入ASCII文件时,将ASCII码写入文件也就等于把字符写入文件。

    若要以ASCII码形式存写一个阵列,并指定文件使用的分隔符,需要使用dlmwrite函数,比如重新指定分号作为分隔符,把变量x存到文件 my_test2.dat 文件中,查看其结果:

    0.92181;0.17627;0.93547

    0.73821;0.40571;0.9169

    在默认情况下,dlmwrite函数用逗号或空格作为分隔符,或者是指定空的引号,即无分隔符。

     

    2. 使用diary命令来存写数据

    较小的数值阵列或单元阵列的存写可以使用diary命令,例如,在工作空间中有一个阵列A: A=[1 2 3 4 5; 6 7 8 9 10]

    在命令提示符下执行如下命令:diary my_test3.dat,就可以创建my_test3.dat文件。接下来显示要存写的阵列A:

    A =

        1     2     3     4     5

        6     7     8     9    10

    然后执行关闭diary命令:diary off。

    这时,在文本编辑器中打开my_test3.dat文件,会发现diary命令创建的文件记录了在MATLAB会话期间的所有命令。可以通过编辑,删去无关的文本。

    2.3  二进制数据

    2.3.1  二进制数据的读取

        本小节将介绍怎样将一般格式下的二进制数据文件读取到工作空间中。读取二进制数据常用的方法有两种,一是使用导入模板来导入,二是使用二进制数据导入函数来读取。

    1. 使用导入模板读取二进制数据

    要使用导入模板来读取二进制数据,需按以下步骤进行:

    (1) 选择File→Import Data选项,弹出一个文件选择对话框;也可以使用uiimport函数来打开导入数据模板。

    (2) 在文件选择对话框中选择想导入数据的二进制数据文件,然后单击Open按钮,导入数据模板就会打开该文件并准备处理其内容。

    (3) 选择要导入的变量。在默认情况下,导入模板将要建立的变量取决于文件中的数据类型。

    (4) 单击Finish按钮完成数据的导入。

    这个过程和使用导入模板读取文本文件是基本一致的,这里就不再举例了。

    2. 使用导入函数读取二进制数据

    若要从命令行或一个 M 文件中读取二进制数据,就必须使用 MATLAB 导入函数,函数的选择取决于文件中数据的格式,这些函数如表2-4所示。

    表2-4  导入二进制数据函数

    函 数 名 称|读取文件的扩展名|数 据 格 式

    load|.mat|读取MATLAB下的MAT数据格式的数据

    aviread|.avi|读取AVI格式的音频视频数据

    cdfread|.cdf|读取CDF格式的数据

    hdf|.hdf|读取HDF格式的数据

    imread|.bmp  .cur  .gif  .hdf  .ico .jpg  .pbm  .pgm  .png  .pnm  .ppm  .pcx  .tif  .xwd  .ras|读取各种格式的图形数据

    wavread|.wav|读取 Windows 系统的声音文件

    xlsread|.xls|读取 Excel 电子表格数据

    2.3.2  二进制数据的存写

    要以一种标准二进制格式来存写二进制数据,可以使用 MATLAB 提供的高端函数,函数的选择取决于要存写数据的类型,这些函数如表2-5所示。

    表2-5  导出二进制数据函数

    函 数 名 称|读取文件的扩展名|数 据 格 式

    save|.mat|存写MATLAB下的MAT数据格式的数据

    avifile|.avi|存写AVI格式的音频视频数据

    cdfwrite|.cdf|存写CDF格式的数据

    hdf|.hdf|存写HDF格式的数据

    imwrite|.bmp  .cur  .gif  .hdf  .ico .jpg  .pbm  .pgm  .png  .pnm  .ppm  .pcx  .tif  .xwd  .ras|存写各种格式的图形数据

    wavwrite|.wav|存写 Windows 系统的声音文件

    xlswrite|.xls|存写 Excel 电子表格数据

     

    在MATLAB中可以将一系列的图像保存为电影,这样使用电影播放函数就可以进行回放,保存方法可以同保存其他MATLAB工作空间变量一样,通过采用MAT文件格式保存。但是若要浏览该电影,必须在MATLAB环境下。在以某种格式存写一系列的MATLAB图像时,不需要在MATLBA 环境下进行预览,通常采用的格式为AVI格式。AVI是一种文件格式,在PC 机上的Windows系统或UNIX操作系统下可以进行动画或视频的播放。

    若要以AVI格式来存写MATLAB图像,步骤如下:

    (1) 用avifile函数建立一个AVI文件。

    (2) 用addframe函数来捕捉图像并保存到AVI 文件中。

    (3) 使用close函数关闭AVI文件。

    注意:

    若要将一个已经存在的MATLAB电影文件转换为AVI文件,需使用函数movie2avi。函数原型为:

    movie2avi(mov,filename)

    movie2avi(mov,filename,param,value,param,value...)

    2.4  使用文件I/O函数

    前面介绍的都是MATLAB中的一些高级函数,除此之外MATLAB还包含了一组低端的文件I/O函数,如前面介绍的所有文件的打开和关闭函数:fopen函数和fclose函数。这些函数是建立在ANSI标准C库中的I/O函数。若用户对C语言熟悉的话,那么也肯定熟悉这些函数。比如,MATLAB 文件I/O函数使用和C语言同样的编程模式等。要读写这些数据,需进行以下几步:

    (1) 使用fopen函数打开文件。fopen函数将会返回一个文件标志,通过它,就可以使用其他所有的低端文件I/O函数。

    (2) 对文件进行操作,如:读写二进制数据、格式化读写文本数据等。

    (3) 使用fclose函数来关闭文件。

    2.4.1  二进制数据的读取

    使用fread函数可从文件中读取二进制数据,它将每个字节看成整数,并将结果以矩阵形式返回。对于读取二进制文件,fread必须制定正确的数据精度。fread的基本调用方法是:A=fread(fid)

    其中fid是一个整数型变量,是通过调用fopen函数获得的,表示要读取的文件标识符,输出变量A为矩阵,用于保存从文件中读取的数据。

    例如文件test.txt的内容如下:

    test it

    用fread函数读取该文件,输入如下命令:

    >> f=fopen('test.txt','r');

    >> answer=fread(f)

     

    answer =

     

      116

      101

      115

      116

       32

      105

      116

    输出变量的内容是文件数据的ASCII码值,若要验证读入的数据是否正确,通过下面的命令可以验证。

    >> disp(char(ans1'))

    test it

    fread函数的第二个输入参数可以控制返回矩阵的大小,例如:

    >> f=fopen('test.txt','r');

    >> answer=fread(f,2)

     

    answer =

     

      116

      101

    也可以把返回矩阵定义为指定的矩阵格式,例如

    >> f=fopen('test.txt','r');

    >> an=fread(f,[2 3])

     

    answer =

     

      116   115    32

      101   116   105

    使用fread函数的第三个输入变量,可以控制fread将二进制数据转成MATLAB 矩阵用的精度,包括一次读取的位数(Number of Bits)和这些位数所代表的数据类型。常用的精确度类型有下列几种,如表2-6所示。

    表2-6  常见的精确度类型

    数 据 类 型|说    明|

    char|带符号的字符(通常是8h16)  

    uchar|无符号的字符(通常是8bits)

    short|短整数(通常是16bits)

    long|长整数(通常是16bits)

    float|单精度浮点数(通常是32bits)

    double|双精度浮点数(通常是64bis)

    2.4.2  二进制数据的写入

    使用fwrite函数可将矩阵按所指定的二进制格式写入文件,并返回成功写入文件的大小。函数的调用方式如下:

    count=fwrite(fid,A,precision)

    其中,count用来返回写入文件数据的大小,f参数同样是通过fopen函数获得的整数型变量,表示文件标识符,A表示要写入的数据矩阵,第三个参数precision同二进制读取函数的参数一样,表示数据的写入格式。

    在下例中fwrite产生一个大小为100字节的二进制文件,它包含了一个5×5阶魔方矩阵,共25个元素,每个元素占用4个字节。

    f=fopen('magic5.bin', 'w');

    fwrite(f,magic(5), 'int32');

    fclose(f)

    二进制文件在不同的计算机架构上可能存储方式不同,所以二进制文件存在兼容性问题,而文本文件则不存在这种兼容性问题。不同的存储方式导致在不同架构上保存的二进制文件在另外的平台上无法读取,这主要是因为多字节数据类型在计算机硬件上的存储顺序不同。在MATLAB中,无论计算机上的数据存储顺序是哪一种,都可以读写二进制文件,但要正确地调用fopen函数打开文件。

    2.4.3  格式化读取ASCII码数据

    fscanf函数与C语言中的fscanf在结构、含义和使用上都很相似,即能够从一个有格式的文件中读入数据,并将它赋给一个或多个变量。两个函数都采用同一组格式指定符来控制输入数据的格式,fscanf的格式指定符由字符%开头,常用格式如表2-7所示。

    表2-7  常见的用于输入的格式转换符

    格式转换符|意    义

    %c|读取字符型变量,也可以指定多个字符,'%3c'

    %s|读取字符串变量

    %d|读取整数型变量

    %f|读取浮点数

    %g|读取双精度浮点数

     

    例如,我们仍然读取my_test.dat文件中的数据,其数据内容是:

     4.5646767e-001  8.2140716e-001  6.1543235e-001

     1.8503643e-002  4.4470336e-001  7.9193704e-001

    通过下面这段代码,将该文件中的数据读取到列向量T中。

    >> f=fopen('my_test.dat','r');

    >> T=fscanf(f,'%g');

    >> fclose(f)

    也可以通过以下代码段把文件数据读取到一个3×2矩阵A中。

    >> f=fopen('my_test.dat','r');

    >> A=fscanf(f,'%g',[3 2]);

    >> fclose(f)

    执行后结果如下,这时候A矩阵恰好是文件中数据矩阵的转置。

    >> A

     

    A =

     

       0.4565    0.0185

       0.8214    0.4447

       0.6154    0.7919

    2.4.4  格式化写入文本数据

    fprintf将会把数据转换为字符串,并将它们输出到屏幕或文件中。一个格式控制字符串包含转换指定符和可选的文本字符,通过它们来指定输出格式。转换指定符用于控制阵列元素的输出。

    当fprint函数做标准输出,也就是运行结果显示在屏幕上的时候,它的功能和disp函数相类似,区别仅在于fprint可以输出特定格式的文本数据。

    比如,创建一个2×2的魔方矩阵,然后打开一文件,写入数据。

    >> clear all;

    >> x=magic(2);

    >> fid=fopen('exam4.txt','w');

    >> fprintf(fid,'%4.2f  %8.4f\n',x);

    >> fclose(fid);

    执行这段程序段之后,我们可以检验一下执行结果:

    >> x

     

    x =

     

        1     3

        4     2

     

    >> type exam4.txt

     

    1.00    4.0000

    3.00    2.0000

    可以看出,fprintf函数在打印显示矩阵数据时,数据转换规则是可以按列方式循环作用于矩阵的各个元素的,这个例子中显示出来的结果就好像原矩阵的转置,而且分别按数据转换规则显示。

    2.4.5  控制文件位置指针

    每一次打开文件时,MATLAB就会保持一个文件位置指针(File Position Indicator),由它决定下一次进行数据读取或写入的位置。控制此指针的函数如表2-8所示。

     

    表2-8  控制位置指针的函数

     

    函 数 名 称|功 能 说 明

     

    fseek|设定指针位置

     

    ftell|获得指针位置

     

    frewind|重设指针到文件起始位置

     

    feof|测试指针是否在文件结束位置

     

    fseek 函数用于指定文件指针的位置,调用方式如下:status=fseek(fid,offset,origin)

    fid是指定的文件标识符。offset为整数型变量,表示相对于指定位置需要的偏移字节数,正数表示向文件末尾偏移,负数表示向文件开头偏移。Origin可以是特定字符串,也可以是整数,表示文件中的参考位置。参考位置的参数说明如表2-9所示。

    表2-9  参考位置参数的说明

    参考位置(origin)|说    明

    'bof '或者 -1|文件开头

    'cof '或者 0|文件中当前位置

    'eof '或者 1|文件末尾

     

    ftell 函数用来获得当前文件指针的位置,调用方式如下:position=ftell(fid)

    fid是指定的文件标识符。Position为返回值,表示当前指针的位置。position是以相对于文件开头的字节数来表示的。如果返回值为–1,表示未能成功调用。这是可以通过调用feeeor(fid)的具体的错误信息。

     

    frewind 函数用来把文件指针重新复位到文件开头。调用方式如下:

    frewind(fid)

    其中fid为指定的文件标识符,其作用和fseek(fid,0,-1)是等效的。

     

    feof 函数用来判断是否到达文件末尾。调用方式如下:

    eofstat=feof(fid)

    其中fid为指定的文件标识符。eofstat是返回值,当到达文件末尾时,eofstat为1;否则为0。比如我们仍然对文件my_test.dat执行以下命令,然后测试文件指针位置

    >> f=fopen('my_test.dat','r');

    >> A=fscanf(f,'%g',[3 2])

     

    A =

     

       0.4565    0.0185

       0.8214    0.4447

       0.6154    0.7919

    >>feof(f)

     

    ans=

     

        0

    在本例中,文件指针指向最后一个数据,而不是文件末尾,因此返回值是0,而不是1,但是若执行以下命令:

    >> f=fopen('my_test.dat','r');

    >> A=fscanf(f,'%g',[4 2])

     

    A =

     

       0.4565    0.4447

       0.8214    0.7919

       0.6154         0

       0.0185         0

    >>feof(f)

     

    ans=

     

        1

    在my_data.dat文件中只包含6个数字,因此feof函数返回值为1。若要重新设置指针到起始位置,就可以直接使用frewind函数。

    2.5  MAT 文 件

    MAT文件是MATLAB使用的一种特有的二进制数据文件。MAT文件可以包含一个或者多个MATLAB 变量。MATLAB通常采用MAT文件把工作空间的变量存储在磁盘里,在MAT文件中不仅保存各变量数据本身,而且同时保存变量名以及数据类型等。所以在MATLAB中载入某个MAT文件后,可以在当前MATLAB工作空间完全再现当初保存该MAT 文件时的那些变量。这是其他文件格式所不能的。同样,用户也可以使用MAT文件从MATLAB环境中导出数据。MAT文件提供了一种更简便的机制在不同操作平台之间移动MATLAB数据。

    2.5.1  在MATLAB中读写MAT文件

    在MATLAB环境中,通常使用load和save两个命令进行 MAT 文件的读和写。在默认情况下,这两个命令以 MAT 文件格式处理文件,但是也可以用-ascii参数选项来强制用文件方式处理文件。关于这点已经在本章介绍过了,这里主要介绍如何读写MAT文件。

    1. load 函数的使用

    load函数可以从MAT文件中读取数据,例如要读取mymat.dat文件,可以直接执行命令load mymat.dat,因为给出要读取的文件的后缀名是MAT,因此命令则以MAT文件格式读取数据,否则将以文本文件读取数据。命令中的文件名可以包含单引号,也可以不包含,也就是说该函数也可以这样调用:load 'mymat.mat' 。

    load 函数还可以指定只读取文件中的某几个变量,只需在文件名之后列出想要读取的变量的变量名就可以了,变量名也可以使用通配符。

    比如命令load mymat.mat y*,执行结果就是将文件中所有以y开头的变量读取出来。

    load还有一种函数形式的调用方式。这种调用方式就要求文件名必须是字符串,比如要导入mymat.mat文件,那么函数形式的调用必须是s = load('mymat.mat')。

    2. save函数的使用

    save 函数的功能是把当前MATLAB工作空间的一个或多个变量存写到外部文件。在默认情况下,save 函数以MAT格式存写数据。若在命令中直接调用该函数,不带任何参数,执行结果是把MATLAB工作空间的所有变量保存到系统默认的matlab.mat文件中。当然,带上文件名参数,就可以将当前工作空间中的所有变量存写在指定的 MAT文件中。

    如果用户需要保存指定的某几个变量,只需在文件名参数后,列出要保存的文件名即可。比如,命令save mymat.mat x,y,z执行后的结果就是将当前工作空间中的变量 x,y,z保存到mymat.mat文件中,要求x,y,z是当前工作空间中已经存在的变量。

    2.5.2  在普通的C/C++程序中读写MAT文件

    1.使用MATLAB 提供的MAT 文件接口函数

    在C/C++程序中有两种方式可以读取MAT文件数据。一种是利用MATLAB提供的有关MAT文件的编程接口函数。MATLAB的库函数中包含了MAT文件接口函数库,其中有各种对MAT文件进行读写的函数,都是以mat开头的函数。如表2-10所示。

    表2-10  C语言中的MAT文件读写函数

    MAT  函  数|功    能

    matOpen|打开 MAT 文件

    matClose|关闭 MAT 文件

    matGetDir|从 MAT 文件中获得 MATLAB 阵列的列表

    matGetFp|获得一个指向MAT 文件的ANSI C 文件指针

    matGetVariable|从MAT文件中读取MATLAB阵列

    matPutVariable|写MATLAB阵列到MAT文件

    matGetNextVariable|从MAT文件中读取下一个MATLAB阵列

    matDeleteVariable|从MAT文件中删去下一个MATLAB阵列

    matPutVariableAsGlobal|从MATLAB阵列写入到MAT文件中

    matGetVariableInfo|从MAT文件中读取MATLAB阵列头信息

    matGetNextVariableInfo|从MAT文件中读取下一个MATLAB阵列头信息

    展开全文
  • Porject_Kiwi 离线式数字信号处理(一) 使用Matlab读取TXT数据文件并做FFT分析 在我群项目Project_Kiwi中,LTC2208的评估已经圆满完成,现在开始下一步的工作。 今天要来测试的,是使用matlab对数据进行简单处理。 ...
  • MATLAB提供了多种方式从磁盘读入文件或将数据输入到工作空间,即读取数据,又叫导入数据;将工作空间的变量存储到磁盘文件中称为存写数据,又叫导出数据。至于选择哪种机制,则根据下面两个因素决定:● 用户所执行...
  • 错误使用 load无法读取 MAT 文件 C:\XX\MathWorks\MATLAB\R2018a\matlabprefs.mat。不是二进制 MAT 文件。请尝试执行 load -ASCII 以便以文本形式读取。出错 prefutils>loadPrefs (line 42)fileContents = load...
  • Matlab读取BMP文件代码flim_optcrf• **使用Optnet和CRF从FLIM数据中学习的软件** 资料设定 创建火车和测试目录。 在test1.py中设置其路径。在每个目录下,每个图像都有一个子目录,例如im3。 每个子目录-00ng_im3_...
  • MATLAB 读取和显示 bin 文件数据

    千次阅读 2020-11-26 12:43:59
    %%%%%%%%.bin文件读取方式%%%%%%%%%% %将读取的数据放置在M行N列中,N表示将读取的数据放置在1列中 fip=fopen('imu.bin','rb'); [result_imu,num]=fread(fip,[7 301445],'double');%inf表示读取文件中的所有数据...
  • 初识MATLAB文件读取

    2020-12-19 12:29:22
    初识MATLAB文件读取MATLAB的每一个脚本文件,几乎都涉及到文件读写操作,我以几个案例来分析MATLAB文件读取的基本操作。1. 打开与关闭文件打开文件的函数为fopen,关闭文件的函数为fclose。这里将MATLAB中help...
  • matlab怎么导入tab文件

    2021-04-20 01:52:12
    本章将要介绍 MATLAB文件读写和数据的导入导出。13.1 数据基本操作本节介绍基本的数据操作,包括工作区的保存、导入和文件打开。13.1.1 文件的存储MATLAB支持工作区的保存。用户可以将工作区或工作区中的变量以...
  • matlab中fprintf函数的详细使用方式示例如下: fprintf函数可以将数据按选定格式读取到文本文件中。其调用格式为: fprintf(fid,format,A) 说明:fid为文件句柄,指定要读取数据的文件,format是拿来控制所写...
  • 在 WWW 上可以找到几个读取 C3D 文件Matlab 例程,但不幸的是 Matlab >= 2008b (v7.7) 不再以 VAX-D 格式打开文件。 此函数将 VAX-D 编写的 C3D 文件转换为 IEEE-LE 文件PC 样式),并在 Matlab 6 和 7 下...
  • Matlab查看tdms文件

    千次阅读 2020-11-11 17:19:29
    由于最近项目需要使用Labview开发解调设备,对于高速采集卡就需要使用tdms存储数据(存储的数据量较大),而用matlab无法对tdms格式文件进行直接读取,所以查找一些相关博客,解决了读取的问题。(以下操作在matlab...
  • 一、准备工作观测值数据读取是进行数据处理的前提,通常,观测值的...我认为对o文件读取要做以下准备工作,分别是:(1)安装MatlabPC;(2) 学习rinex.pdf资料;(3)o文件准备;(4)伪代码编写,理清数据流;(5)代码测...
  • Matlab读取BMP文件代码匹兹堡大学-ECE2195最终项目 此存储库是利用Sobel算法的边缘检测图像处理器的FPGA实现。 第一个项目包含VHDL代码和一个测试平台,用于执行图像处理功能的仿真。 第二个项目是针对Xilinx Artix-...
  • MATLAB提供了多种方式从磁盘读入文件或将数据输入到工作空间,即读取数据,又叫导入数据;将工作空间的变量存储到磁盘文件中称为存写数据,又叫导出数据。至于选择哪种机制,则根据下面两个因素决定: ● 用户所...
  • 在编写一个程序时,经常需要从外部读入数据,或者将程序运行的结果保存为文件MATLAB使用多种格式打开和保存数据。本章将要介绍 MATLAB文件读写和数据的导入导出。13.1 数据基本操作 本节
  • % 读取名字为 rtk.txt 的文件 datanumber = 3036; gps_data = zeros(datanumber,7); for i = 1:1:datanumber gps_data(i,1:7) = Data(i,1:7) ; %读取到3036x7的矩阵中 end dlmwrite('result_gps.txt',...
  • [INFO, DATA] = ACQREAD(FILENAME) 读取字符串 FILENAME 中指定的 AcqKnowledge 文件的内容。 INFO 是包含元数据(标题、标记等)的结构。 DATA 是一个单元阵列,由通道编号索引,包含获取的生理信号。 [INFO, DATA...
  • 例2-1 %exam1.m[f,message]=fopen('fileexam1', 'r... %显示错误信息end若文件fileexam1不存在,则显示如下信息。Cannot open file.existence?permissions?memory?...例2-2 %exam2.m[f,message]=fopen('fileexam2', ...
  • matlab中有一个用于生成midi文件的函数:writemidi但是测试发现该函数生成的midi文件不能直接在windows media player中播放,但是可以由miditoolbox中的readmidi函数读取。经过分析发现,原因是该函数生成的midi文件...
  • 你在这里因为你有,有一个文件扩展名结尾的​​文件.voi.文件文件扩展名.voi只能通过特定的应用程序推出。这有可能是.voi文件是数据文件,而不是文件或媒体,这意味着他们并不是在所有观看。什么是一&nbsp.voi...
  • matlab数据读取与存入详解在编写一个程序时,经常需要从外部读入数据,或者将程序运行的结果保存为文件MATLAB使用多种格式打开和保存数据。本章将要介绍MATLAB文件读写和数据的导入导出。13.1 数据基本操作本...
  • 原创Matlab读取图片、显示和保存图像的详细教程编辑:小安 来源:PC下载网时间:2019-11-16 10:15:48借助Matlab软件能对矩阵进行各种运算,操作非常方便的。那么Matlab究竟是如何读取图片、显示和保存图像的呢?今天小...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,703
精华内容 681
关键字:

matlab读取pc文件

matlab 订阅