《MATLAB SYNTAX》第11章 文件操作

(11.1) 文件的打开与关闭

fid = fopen(fileName,permission);

文件打开成功时,fid返回一个整数,打开不成功时,返回-1。permission是文件的打开方式,'r'代表以读的方式打开(默认),'w'表示以写的方式打开,'r+'表示以读写的方式打开,'a'表示以追加的方式打开。

status = fclose(fid);

fid表示待关闭文件的标识号,如果fid为all,则关闭所有已打开的文件(标准文件如屏幕、键盘除外)。关闭成功,status返回0,关闭不成功,返回-1。

(11.2) 文本文件的读写

[A,count] = fscanf(fid,fmt,size); %读
count = fprintf(fid,fmt,A); %

A用于存放读写的数据。count表示成功读写的数据单元元素个数。fmt可以控制读取的数据格式,'%d'表示整数,'%f'表示浮点数,'e'表示科学计数法,'%c'表示字符,'%s'表示字符串,在%之后还可以指定宽度如:'%3d''%10.5f'size用来指定A的大小,n表示指定n个数据,inf表示指定全部数据,[m,n]表示指定m×n个数据。

例:现在有一组数据如下,读取文件前6行数据(注意保存文件时的编码方式要改为ANSI)。
在这里插入图片描述

clc;clear;
fid = fopen('data.txt','r');
title = fscanf(fid,'%s',6); %读取标题行
cache = cell(3,6); %3×6的元胞数组来接受读取数据
for i = 1:3
    cache{i,1} = fscanf(fid,'%s',1);
    cache{i,2} = fscanf(fid,'%s',1);
    cache{i,3} = fscanf(fid,'%f',1);
    cache{i,4} = fscanf(fid,'%f',1);
    cache{i,5} = fscanf(fid,'%f',1);
    cache{i,6} = fscanf(fid,'%s',1);
end
disp(cache);
fclose(fid);
>>
    '1月1日'    'NW'     [2.2000]    [2.3000]    [1024]    '晴转多云'
    '1月2日'    'W'      [1.5000]    [     3]    [1022]    '晴转多云'
    '1月3日'    'SSE'    [     1]    [2.6000]    [1020]    '晴转多云'

(11.3) 二进制文件的读写

[A,count] = fread(fid,size,precision,skip); %读
count = fwrite(fid,A,precision); %

A用于存放读写的数据。count表示成功读写的数据个数。precision用来指定读写数据的类型如'double'等。size表示A的大小。skip表示指定按比例周期性地跳过一些数据,默认为0。

(11.4) 文件指针位置控制

fseek(fid,offset,origin); %改变文件指针的位置

offset表示文件指针相对移动的字节数。origin表示文件指针移动的参照位置,'cof'0表示文件指针的当前位置,'bof'-1表示文件的开头位置,'eof'1表示文件的结束位置。

position = ftell(fid); %查询文件指针的当前位置
status = feof(fid); %判断当前文件指针是否到达了文件尾部,是(status=1)、否(status=0)

(11.5) CSV文件的读写

csvwrite(fileName,M,row,col); %从指定的行和列偏移量开始将矩阵M以逗号分隔(CSV)形式写入文件中(行和列从0开始)
M = csvread(filename,R1,C1,[R1 C1 R2 C2]); %仅读取行偏移量R1和R2及列偏移量C1和C2界定的范围
clc;clear;
fileName = 'data.csv';
row = 1;col = 1;M = magic(4);
csvwrite(fileName,M,row,col);
type(fileName); %查看文件中的数据,只能是包含数值型数据的文件
A = csvread(fileName)
B = csvread(fileName,2,2)
C = csvread(fileName,2,2,[2,2,3,3])
>>
    ,,,,
    ,16,2,3,13
    ,5,11,10,8
    ,9,7,6,12
    ,4,14,15,1
A =
    0     0     0     0     0
    0    16     2     3    13
    0     5    11    10     8
    0     9     7     6    12
    0     4    14    15     1
B =
    11    10     8
     7     6    12
    14    15     1
C =
    11    10
     7     6

(11.6) TEXT文件的读写

clc;clear;
fileName = 'data.txt';
M = magic(3)*pi;
N = magic(4)*pi;
%用制表符划分相邻元素,每个元素以3位有效数字显示
dlmwrite(fileName,M,'delimiter','\t','precision',3);
type(fileName);
%用追加方式写入文件,1行的行偏移量,用“;”划分相邻元素,显示三位小数
dlmwrite(fileName,N,'-append','delimiter',';','roffset',1,'precision','%.3f');
%delimiter还可以为','';''\t'' ',coffset控制列偏移量
type(fileName);
>>
    25.1 3.14 18.8
    9.42 15.7 22
    12.6 28.3 6.28

    25.1 3.14 18.8
    9.42 15.7 22
    12.6 28.3 6.28
    ;;;
    50.265;6.283;9.425;40.841
    15.708;34.558;31.416;25.133
    28.274;21.991;18.850;37.699
    12.566;43.982;47.124;3.142
clc;clear;
fileName = 'data.txt';
M = magic(3);
N = magic(4);
dlmwrite(fileName,M,'delimiter',' ');
dlmwrite(fileName,N,'delimiter',' ','-append','roffset',1);
type(fileName);
A = dlmread(fileName,' ')
B = dlmread(fileName,' ',1,1)
C = dlmread(fileName,' ',[1 1 2 2])

>>
    8 1 6
    3 5 7
    4 9 2
   
    16 2 3 13
    5 11 10 8
    9 7 6 12
    4 14 15 1
A =
    8     1     6     0
    3     5     7     0
    4     9     2     0
    0     0     0     0
   16     2     3    13
    5    11    10     8
    9     7     6    12
    4    14    15     1
B =
    5     7     0
    9     2     0
    0     0     0
    2     3    13
   11    10     8
    7     6    12
   14    15     1
C =
    5     7
    9     2

(11.7) EXCEL文件的读写

xlswrite('filename',A,'sheet','xlRange'); %[num,txt,raw] = xlsread('fileName','sheet','xlRange'); %

A表示待写入数据的矩阵。sheet可以指定excel的工作表,缺省时为第一张工作表。xlRange可以指定读写范围,缺省时为从A1读写。num表示以矩阵接收excel中数值部分。txt表示以元胞数组的形式接收excel中字符部分。raw表示以元胞数组的形式接收excel中数值和字符部分。

clc;clear;
fileName = 'data.xlsx';
sheet = 1;
write_range = 'A1';
read_range = 'A1:F4';
headers = {'日期','风向','风速','气温','气压','天气状况'};
contents = {'1月1日','NW',2.2,2.3,1024,'晴间多云';...
            '1月2日','W',1.5,3,1022,'晴间多云';...
            '1月3日','SSE',1,2.6,1020,'晴间多云'};
xlswrite(fileName,[headers;contents],sheet,write_range);
[num,txt,raw] = xlsread(fileName,sheet,read_range)
>>
num =
    1.0e+03 *
        0.0022    0.0023    1.0240
        0.0015    0.0030    1.0220
        0.0010    0.0026    1.0200
txt =
    4×6 cell 数组
        {'日期'    }    {'风向'}    {'风速'  }    {'气温'  }    {'气压'  }    {'天气状况'}
        {'2021/1/1'}    {'NW'  }    {0×0 char}    {0×0 char}    {0×0 char}    {'晴间多云'}
        {'2021/1/2'}    {'W'   }    {0×0 char}    {0×0 char}    {0×0 char}    {'晴间多云'}
        {'2021/1/3'}    {'SSE' }    {0×0 char}    {0×0 char}    {0×0 char}    {'晴间多云'}
raw =
    4×6 cell 数组
        {'日期'    }    {'风向'}    {'风速'  }    {'气温'  }    {'气压'}    {'天气状况'}
        {'2021/1/1'}    {'NW'  }    {[2.2000]}    {[2.3000]}    {[1024]}    {'晴间多云'}
        {'2021/1/2'}    {'W'   }    {[1.5000]}    {[     3]}    {[1022]}    {'晴间多云'}
        {'2021/1/3'}    {'SSE' }    {[     1]}    {[2.6000]}    {[1020]}    {'晴间多云'}

《 M A T L A B   S Y N T A X 》 系 列 博 客 创 作 参 考 资 料 来 源 《MATLAB\ SYNTAX》系列博客创作参考资料来源 MATLAB SYNTAX

  1. 《自动控制原理实验教程》.巨林仓.西安交通大学出版社.
  2. 《MATLAB工程与科学绘图》.周博.薛世峰.清华大学出版社.
  3. 《MATLAB R2018a完全自学一本通》.刘浩.韩晶.电子工业出版社.
  4. 《科学计算与MATLAB语言》.刘卫国.蔡旭晖.吕格莉.何小贤.中国大学MOOC.
  5. 《MATLAB软件与基础数学实验》.李换琴.朱旭.王勇茂.籍万新.西安交通大学出版社.
  6. 《Matlab教程 - 图像处理》@正月点灯笼.https://www.bilibili.com.
  7. 《MATLAB从入门到秃头》@古德谓尔.https://www.bilibili.com.

博 客 创 作 : A i d e n   L e e 博客创作:Aiden\ Lee Aiden Lee
特别声明:文章仅供学习参考,转载请注明出处,严禁盗用!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值