fwrite(, ‘w’):以读的方式打开一个不存在的文件,会进行创建,可用这种方式预先创建一些文件,并获得文件标识符;
Df = cell(1, 10); % 1 行 10 列的元组 for i = 0:9, Df{i+1} = fopen(['test' num2str(i) '.ascii'], 'w'); end
1. fopen()
fileID = fopen(filename)
% 默认情况下,二进制读权限
fileID = fopen(filename,permission)
fopen 返回文件标识符(file identifier),如果文件打开失败,fileID == -1,如果打开成功,fileID >= 3,matlab 保留 0,1,2 分别作为标准输入、标准输出(控制台)、标准错误输出。
最后不要忘记释放文件标识符资源:
fclose(fileID)
fid = fopen('./nine.bin', 'w');
fwrite(fid, 1:9);
fclose(fid);
fid = fopen('./nine.bin');
A = fread(fid);
A
fclose(fid);
2. fread()
A = fread(fileID)
A = fread(fileID,sizeA)
A = fread(fileID,sizeA,precision)
% 也可返回
[A, count]
% count 与 sizeA 相匹配,表示读取的元素的数目
注意 fread 作用的是文件标识符,而不是文件本身,所以一种更为简洁的做法是:
A = fread(fopen('./...'), ...);
fid = fopen('./doubeldata.bin', 'w');
fwrite(fid, magic(4), 'double');
fclose(fid);
[A, count] = fread(fopen('./doubledata.bin'), [2, 8], 'double');
A
count
fclose(fid);
输出为:
A =
16 9 2 7 3 6 13 12
5 4 11 14 10 15 8 1
cnt =
16
3. textscan:从文本文件或字符串中读取格式化的数据
C = textscan(fileID, formatSpec)
因为对文本文件所存内容数据类型的不确定,textscan
返回值类型必然是元祖类型;
从字符串中格式化地读取数据:
chr = '0.41 8.24 3.57 6.24 9.27'; C = textscan(chr,'%f');
读取格式化的文本文件,比如
scan1.dat
文件内容为:09/12/2005 Level1 12.34 45 1.23e10 inf Nan Yes 5.1+3i 10/12/2005 Level2 23.54 60 9e19 -inf 0.001 No 2.2-.5i 11/12/2005 Level3 34.90 12 2e5 10 100 No 3.1+.1i
共有八个属性列,则读取方式如下:
fid = fopen('scan1.dat'); C = textscan(fid, '%s %s %f32 %d8 %u %f %f %s %f'); fclose(fid); celldisp(C)