文件读取方法
目标:读取每一行数字数目不同的纯文本文件。形如:
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函数对此问题的解决比较有效。