【matlab】对每一行数据不等的txt文件读取问题

时间:2021-06-05 12:20:52

文件读取方法

 

目标:读取每一行数字数目不同的纯文本文件。形如:

 

9

 

2   8  9   7   3  4   6   8   9

 

0   0  2   8   7  4   0   1   6

0   0  8   0   2  7   4   4   6

2   8  0   2   7  8   0   2   6

8   0  2   0   5  0   8   8   6

7   2  7   5   0  5   4   7   6

4   7  8   0   5  0   8   2   6

0   4  0   8   4  8   0   4   6

1   4  2   8   7  2   4   0   6

6   6  6   6   6  6   6   6   0

 

高级函数:

调用低级函数,语法简单,使用方便。

1. File-Import data

只适合纯数字(列数相同)或者开头只有几行文字(数字列数相同)的文件输入,保存为同文件名的.mat文件。

 

2. 函数 importdata

A=importdata(filename)

importdata('examp6_2_4.txt')

 

注意filename要加上.txt.

 

3. 函数load

 

load F_S9.txt

load -ascii  F_S9.txt  %强制以文本方式读取数据

 

注意:不能读取隔行数据不等长的情况

 

 

4. dlmread函数

 

M = dlmread (filename)

M = dlmread (filename, delimiter)

M = dlmread (filename, delimiter,R, C)  %R,C:指定读取开始点所在的行或者列, R=0 C=0表示第一行第一列。

M = dlmread (filename, delimiter, range)   %range=[R1,C1,R2,C2]

x = dlmread('examp6_2_3.txt')

x = dlmread('examp6_2_3.txt', ',', 2, 3)

x = dlmread('examp6_2_3.txt', ',', [1, 2, 2, 5])

 

数据不等长时,会自动以0补齐。

利用指定读取范围进行读取。

n=dlmread('singlerow_S9.txt','',[0,0,0,0])%读取第一个数字

l=dlmread('singlerow_S9.txt','',[2,0,2,n-1])%读取第三行数字

f=dlmread('singlerow_S9.txt','',4,0)  %读取第五行以后的数字

 

低级函数

语法复杂,按照各种格式读取文件,具有很好的灵活性。

 

1. 调用fopen 函数打开文件

fid = fopen ( filename, permission)   %fid 为正数,则找到这个文件。没有找到则返回-1.

 

[fid, message] = fopen('xiezhh.txt')

 

filename=['E:\software study\matlab\','6_2_1','.txt'];

disp (filename);

fid=fopen(filename);

 

2. 调用fclose 关闭打开的文件。

Close(fid)关闭文件标识符fid指定的文件。

Close(all) 关闭所有被打开的文件

filename=['E:\software study\matlab\','6_2_1','.txt'];

disp (filename)

fid=fopen(filename)

fclose(fid)

 

3. 调用fgets 和fgetl 函数读取文件的下一行

Fgets 读取下一行,包括换行符,fgetl 不包括换行符。

Tline=fgetl(fid)

Tline=fgetl(fid,nchar)  %nchar 表示只读取前nchar个字符,其他的会丢掉。

filename=['E:\software study\matlab\','6_2_1','.txt'];

disp (filename);

fid=fopen(filename);

n=fgets(fid)

fgetl(fid)

l=fgetl(fid)

fclose(fid);

 

不能对几行的范围同时操作。只能得到第一和第三行的信息。

filename=['E:\software study\matlab\Learning code\File_Exchange\','singlerow_S9','.txt'];

disp (filename);

fid=fopen(filename);

n=fgetl(fid)

fgetl(fid);

l=fgetl(fid)

fclose(fid);

 

总结:

使用dlmread函数对此问题的解决比较有效。