Matlab读写txt文件小结

汇总一下matlab 读/写文本方法

读文本

1.文本只包含数字、科学记数法;

testfile.txt 文本内容如下
1 2 3
4 5 6

1,2,3
4,5,6

1,2;3

1e+2 1.32e+1 2e+2
1e+2 1.32e+1 2e+2

函数:推荐使用 load 函数,代码如下,空格、逗号、分号隔开均可,要求数据列数一致。

data = load('testfile.txt');

输出为: 7 x 3 矩阵
在这里插入图片描述

2.文本只包含数据和字符串(不严格对齐)

testfile.txt 文本内容如下:
head 1
head line 2
1e+2 1.32e+1 2e+2
1e+2 1.32e+1 2e+2
1e+2 1.32e+1 2e+2

使用 importdata、textscan 函数:

% 从第3行开始读取数据,间隔符为空格,跳过前2行
content= importdata('testfile.txt', ' ', 2); 
data1 = content.data;

importdata 可以自动区分字符和数字,并分别存储称为结构体,如下
在这里插入图片描述

fid = fopen('testfile.txt', 'r');
% 从第3行开始读,然后合并
% 如果是空格隔开的,一定不要添加分隔符
cData = textscan(fid, '%f %f %f', 'HeaderLines', 2, 'CollectOutput', 1);  
data2 = cData{1};  % 从元胞数组中提取数据
fclose(fid);

fopen打开文件到fid识别符,textscan识别出来的是cell数据类型,
headline表示跳过的行数;CollectOutput表示是否需要把同一类(基于Matlab的分类法)数据放在一个向量中,1代表true。

在这里插入图片描述

3. 数据严格对齐[ 空格分开 ]

testfile.txt 文本内容如下:
head 1
head line 2
1e+2 1.32e+1 2e+2
1e+2 1.32e+1 2e+2
1e+2 1.32e+1 2e+2

可以使用dlmread:

data2 = dlmread('testfile.txt', ' ', 2, 0);

严格对齐且分隔符为空格,可以使用上述函数。输出结果为矩阵,函数中:’ '中表示分隔符为空格,2 表示跳过前2行,0 表示跳过前0列
在这里插入图片描述

4. 数据严格对齐[ 逗号分开 ]

testfile.txt 文本内容如下:
head 1
head line 2
1e+2, 1.32e+1, 2e+2
1e+2, 1.32e+1, 2e+2
1e+2, 1.32e+1, 2e+2

还可以使用csvread函数:

data3 = csvread('testfile.txt', 2, 0);

参数同理

5. 数据混杂

testfile.txt 文本内容如下:
head 1
head line 2
1e+2, 1.32e+1, 2e+2
1e+2, 1.32e+1, 2e+2
1e+2, 1.32e+1, 2e+2
content 1
content 2
1 2 3 4
5 6 7 8

可以使用 textscan 函数,注意%f, %s等要和数据个数与类型匹配;分两次读出数据;

fid = fopen('testfile.txt', 'r');
cData = textscan(fid, '%f %f %f', 'HeaderLines', 2, 'Delimiter', ',', 'CollectOutput', 1);   % 跳过前2行
data1 = cData{1};
fclose(fid);

fid = fopen('testfile.txt', 'r');
cData = textscan(fid, '%f %f %f %f', 'HeaderLines', 7, 'CollectOutput', 1);  
data2 = cData{1};
fclose(fid);

6. 非矩形数据

testfile.txt 文本内容如下:
1 2 3
4 5
6
同样地,使用 dlmread 函数,缺少部分自动补零

data = dlmread('testfile.txt');

7. 时间形式 [ 多个分割符 ]

testfile.txt 文本内容如下:
2020-4-13, 10:10:10.111 AM
2020-4-14, 10:10:10.111 AM
2020-4-15, 10:10:10.111 AM

使用 textscan 函数,输出的为cell数据类型数据。注意数据个数和类型对齐

fid = fopen('testfile.txt', 'r');   
%'-,:'作分隔符
A = textscan(fid, '%d %d %d %d %d %f %s','delimiter','-,:','CollectOutput',1);
fclose(fid);

在这里插入图片描述

写文本

1. 写数据

% 保存数据、间隔tabs宽度、追加数据:
a = 10*rand(5);
% 科学计数法形式
save('a.txt','a','-ascii');  % 保存为a文件
save('a.txt','a','-ascii','-tabs');  % 保存为a文件,数据之间用Tab间隔
save('a.txt','a','-append','-ascii','-tabs'); % 在a文件后追加内容

% 追加,空一行,分隔符,精度
dlmwrite('test.txt', a, '-append', 'roffset', 1, 'delimiter', '\t', 'precision', '%8.4f');

% 逗号隔开
csvwrite('csvlist.csv', a);  

2. 写带有头文件的文本 / 追加文本,(可能也适用于 .dat文件)

data = rand(2,4)
fid=fopen('testfile.txt','wt'); % 注意'wt'参数重要
fprintf(fid,'%s\n', 'head info'); % 头信息
fprintf(fid,'%d  %10.4f  %10.4f  %10.4f\n', data);  % 写数据部分,注意个人和类型
fclose(fid);

% 在已经有的文件后追加,'at'
line1 = [1 2 3 4];
line2 = [1 2 3];
line3 = [1 2];
fid = fopen('test.txt', 'at');   % 注意'at'参数重要
fprintf(fid, '%d %d %d %d\n', line1);
fprintf(fid, '%d %d %d\n', line2);
fprintf(fid, '%d %d\n', line3);
fclose(fid);

前后输出的结果见下图:
在这里插入图片描述

参考文献

https://www.zhihu.com/search?type=content&q=matlab%E8%AF%BB%E5%8F%96%E6%96%87%E4%BB%B6

https://www.zhihu.com/search?q=matlab%E8%AF%BB%E5%8F%96%E6%96%87%E4%BB%B6&utm_content=search_history&type=content

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

大雨海深

感谢您的支持和鼓励

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

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

打赏作者

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

抵扣说明:

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

余额充值