ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

《Matlab语法》第11章 文件操作

2022-01-05 12:07:32  阅读:254  来源: 互联网

标签:11 文件 char 读写 fileName 语法 Matlab fid


第11章 文件操作

(11.1) 文件的打开与关闭

fid = fopen(fileName,permission);

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

status = fcolse(fid);

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

(11.2) 文本文件的读写

[A,count] = fscanf(fid,fmt,size); %读
count = fprint(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]}    {'晴间多云'}

参 考 资 料 来 源 参考资料来源 参考资料来源

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

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

标签:11,文件,char,读写,fileName,语法,Matlab,fid
来源: https://blog.csdn.net/dasdkhaksd/article/details/122319833

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有