MATLAB文件操作总结

1、load&save方法(大规模、规律数据)

(1)读取文件(路径无需引号):
  1. 文本文件:load 文件路径.txt (-ascii),按文件原有规则格式分隔获得double类型矩阵,不过字符并不会读取(它仅读取数值)。
  2. “文件”类型:load 文件路径(无后缀)。
  3. .mat文件:load 文件路径(无需后缀,.mat为默方式)。
(2)保存文件(路径无需引号):
  1. 文本文件:save 文件路径.txt 数据变量 –ascii(必须),若文件路径不带.txt,则获得“文件类型(二进制)”文件;保存方式趋于数值。
  2. 文件”类型:save 文件路径 数据变量 –ascii,这也是一种二进制文件。
  3. .mat文件:save 文件路径(无需.mat,默认格式) 数据变量。

注:load读取时,文件数据的排列类似矩阵或者表格形式(每行等长)!!!

2、大批量文本数据专属读法:textread&textscan

  textread不用fopen目标文件,适用于格式相对统一的txt文件(行可不等长)的一次性大批量读取。textread读取某个文件后,下次再用读取这个文件时,还是会从文件头开始读取。textscan与textread相似,不同处在于:textscan需要fopen获取文件句柄、且结果仅为一个cell矩阵。使用这两者应注意:

  1. 控制字符串书写原则:出现不读、匹配须对。即在控制字符串中出现的则结果中不会出现,匹配一定要“见啥匹配啥”(如不能用%s配数值,不同于C)。
  2. 文件名需加上.txt,且需引号‘’引起来。文件每行可以不等长(用0补位),这点不同于load函数。
  3. 格式控制字符之间可空格、紧挨,也可以是“,”,甚至是“;”等等。按“出现不读”原则书写即可。控制符之后加N可控制只读取文件前N行。
  4. 自定义分割符:'delimiter’,[‘ ,’,’ ;’,…](分隔符可以自定义,仅空格可自动识别)。
  5. 过滤标题行:’headerlines’ ,n,去掉初始的n行标题。
  6. 跳过某个单词:在其对应控制符中加上*,如%*d(使用textread时,所跳单词对应的储存变量也应删去;使用textscan则自适应)。
  7. 取单词的一部分:满足“出现不读”原则。控制符设置为“yx%c”,即只取了yxy中的后一个y。
  8. 替换文件中的空位:‘emptyvalue’, 替换值。
  9. 只读前几列或者指定的列:’%s%*[\n]’(前一列);’%*s%[\n]’(跳过第一列,结果仅为n×1的cell)
  10. 如文本行Lobith;1989-01-01;00:00;28.01,使用textread且控制字符可取:①’%s%d-%d-%d %d:%d%f’,’delimiter’,’;’,或者②’%s;%d-%d-%d;%d:%d;%f’。两种都将数值部分读取成double矩阵(共6个),即满足“出现不读,匹配须对”原则。

3、文本文件的“行字符串”读取

  line=fgetl(fid)/line=fgets(fid,nchar)将文本文件的每一行视为一个“字符串”,然后逐行读取! **前者** 所读的每行字符串中不包括换行符,而 **后者** 保留了换行符;读取完毕至文件末尾时,line=-1!设计了一个读取整个文本的函数如下:

function textData= ReadAllLines(fid) %fid文件句柄
	textData={};
	Line=fgetl(fid);
	while ischar(Line) %读到文件末尾时,fgetl返回-1
    	textData=cat(1,textData,Line); %垂直连接
   		Line=fgetl(fid);
	end
	fclose(fid);
end

4、低级文件I/O操作(灵活自如)

  基本过程为:fid=fopen(‘path’,‘读写类型’)打开→fscanf/fread读取→fprintf/ fwr ite写入→fclose(fid)关闭

(1)文本文件:
  1. fid=fopen(‘path.txt’,’~t’)→ .txt必须加上、t文本时加上(如rt)。
  2. [A,count]=fscanf(fid,format,size)→ A为读取结果;count读取个数;format数据格式(如:%d/%f/%g/%s等);size决定A的排列方式(整个文件:省略/inf、N:读取N个元素到列向量、[m,n]:读取数据到m×n矩阵,n=inf时表示A仅为m行)。
  3. [count,errmsg]=fprintf(fid,format,A)→ count为成功写入字节数;errmsg错误信息;format为数据格式,与fscanf相同,还可加上转义字符\n等;A为待写数据。
  4. fclose(fid)→ 关闭文件。
(2)二进制文件:
  1. fid=fopen(‘path’ ,’~’)→可加上文件后缀,不加则为默认的二进制。
  2. [A,count]=fscanf(fid,size,precision,skip)→ A为读取结果;count读取个数;precision数据类型(如:uchar(默认)/int32/float32/double等);size决定A的排列方式(整个文件:省略/inf、N:读取N个元素到列向量、[m,n]:读取数据到m×n矩阵,n=inf时表示A仅为2列)。skip周期性跳过一些数(默认:字节单位;若果有precision则它定义)。
  3. count=fwrite(fid,A,precision)→count成功写入个数;其他同上。
  4. fclose(fid)→关闭文件。
(3)读取示例:
文件内容如下(共672行):

潮位数据
读取代码:

clc;clear;
fid=fopen('f:\data1.txt','rt');
A=(fscanf(fid,'%d-%d-%d,%f:%f,%f',[6,inf]))'; %转置为6列的A(读取时:出现不读)
fclose(fid);
fd=fopen('f:\Pdata1.txt','wt');
fprintf(fd,'%d-%d-%2d,%2d:%d,%f\n',A'); %按列输出(输出时:出现则输)
fclose(fd);


祝您学习进步!(*^▽^*)

  • 6
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

C_xxy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值