数据的读取
更新时间:2023-09-14 14:58:01 阅读量: 初中教育 文档下载
1. 纯数据(列数相同): 源文件:
0 3866.162 2198.938 141.140 1 3741.139 2208.475 141.252 2 3866.200 2198.936 141.156 3 3678.048 2199.191 141.230 4 3685.453 2213.726 141.261
解答:对于这个txt文件,由于各行列数相同,故简单地使用load,importdata均可。 2.字段名(中、英文字段均可)+数据: 源文件:
CH0 CH1 CH2 CH3
0.000123 0.000325 0.000378 0.000598 0.000986 0.000256 0.000245 0.000698
解答:由于是记录的形式,因此各行列数必相同(缺少部分列时请自行在文件中补上Inf或NaN),故直接使用importdata便可。
3.注释(含有独立的数字串)+数据(列数相同):
问题:这个文件有4列,但前6行是文字说明,4列数字是从第8行开始的.现在我想把这个文件的前2列和文字说明提出来组成一个新的dat文件 源文件:
Group 2 12.02.2006Limei Samples of datas: 50000 CH0 CH1 CH2 CH3
0.000123 0.000325 0.000378 0.000598 0.000986 0.000256 0.000245 0.000698
目标文件: CODE:
Group 2 12.02.2006 Limei Samples of datas: 50000 CH0 CH1
0.000123 0.000325 0.000986 0.000256 解答:由于注释中含有独立的数字串,且注释部分没有明显的格式,这时候用importdata, load等高级命令直接读取会失败,用textread, dlmwrite等格式化命令也不太合适,因此只能使用低级命令进行读取。(当然了,可以跳过注释部分直接用高级命令读取数据,即:[a b c d] = textread(filename,'%f %f %f %f','headerlines',4); )。一个简单的、非通用的包含注释的读取方法如下: clc;clear;
fid = fopen('exp.txt', 'r'); fid_n=fopen('ex.dat','w'); while ~feof(fid) tline=fgetl(fid); if ~isempty(tline)
if double(tline(1))>=48 && double(tline(1))<=57 %数值开始 a=strread(tline);
a(3:4)=[];
fprintf(fid_n,'%f %f\\n',a); clear a;
elseif double(tline(1))==67 %字母C开始
[b1,b2,b3,b4]=strread(tline,'%s %s %s %s'); b=[b1{1},' ',b2{1}]; fprintf(fid_n,'%s\\n',b); clear b b1 b2 b3 b4; else
fprintf(fid_n,'%s\\n',tline); end else
fprintf(fid_n,'%s\\n',tline); end end
fclose(fid); fclose(fid_n);
4. 注释(不含独立的数字串)+数据(列数相同): 源文件: 你好abc
欢迎来到我们 振动论坛 vib.hit.edu.cn 1 11 111 1111 2 22 222 2222 3 33 333 3333 4 44 444 4444 5 55 555 5555
解答:直接用importdata便可 注:有时候注释中含有独立的数字串也可以importdata成功,不过得到的结果有可能不正确,建议这时候使用第3种情形的读取方式。 5. 注释与数据混排:
对此当然只能自己编程,举例: 源文件: 1 11 111 1111 你好
2 22 222 2222 欢迎来到 3 33 333 3333 振动论坛 4 44 444 4444 vib.hit.edu.cn 5 55 555 5555 解答:
CODE:
function [data]=distilldata(infile) %功能说明:
%将保存数据的原始文件中的数值数据读入到一个data变量中 %使用说明:
% infile——原始数据文件名; % data=数据变量 tmpfile='tmp2.mat';
fidin=fopen(infile,'r'); % 打开原始数据文件(.list)
fidtmp=fopen(tmpfile,'w'); % 创建保存数据文件(不含说明文字) while ~feof(fidin) % 判断是否为文件末尾
tline=fgetl(fidin); % 从文件读入一行文本(不含回车键) if ~isempty(tline) % 判断是否空行 [m,n]=size(tline); flag=1;
for i=1:n %判断一行中有没有字符(+-.Ee和空格键除外) if ~(tline(i)==' '|tline(i)=='-'|tline(i)=='.'|tline(i)=='E'... |tline(i)=='e'|tline(i)=='+'...
|(double(tline(i))>=48&&double(tline(i))<=57)) flag=0; break; end end
if flag==1 % 如果是数字行,把此行数据写入文件 fprintf(fidtmp,'%s\\n',tline); end end end
fclose(fidin); fclose(fidtmp);
data=textread(tmpfile); delete(tmpfile);
另外,如果要求不高,也可以使用textread函数跳过注释部分进行读取,不过前提是需要事先知道文件内容的结构(即哪行是数据、哪行是注释) 6.各列数据的分离: 源文件:
0 + 47038.7 1.05 09:26:07 C 2 + 46477.7 1.03 09:28:38 C 4 + 44865.7 1.04 09:28:48 C 6 + 41786.4 1.03 09:28:56 C
解答:直接用 [a,b,c,d,e,f]=textread(yourfilename,'%d %c %f %f %s %c'); 便可 四. 注意事项:
1. 请在matlab中保持当前路径在该数据文件对应的目录下进行存取,否则,存取时请给出该数据文件的具体路径。
2. 存取时,请给出该数据文件的全称(包括后缀名,读取mat文件时可省略)
3. load data.txt和A=load(‘data.txt’)的区别请参阅精华贴:[原创]写给学习matlab的新手们
4. 请根据读写需要来打开文件,即根据你的需要来指定fopen的 permission 属性为读或写。如果只用 a 进行写入,就不能用fread读取。此时应该写完关闭文件,然后用 r 打开读取,或者直接用 a+ 进行同时读写操作。否则,会产生莫名其妙的问题!以下代码是一个错误的例子: CODE:
filename='e.dat';
fid=fopen(filename,'a'); if fid<0
error('fopen error'); end
s=[1 2 3 4;5 6 7 8]; fwrite(fid,s,'float32')
[ddll]=fread(fid,inf,'float32');%把t中的数据全部读出,即s矩阵。 fclose(fid);
此时得到的dd, ll是错误且无意义的! 五. 其他相关问题:
1. 连续读取多个文件的数据,并存放在一个矩阵中: (1) 首先是如何读取文件名: 方法一:
filename=dir(‘*.jpg’);
那么第i个文件的文件名就可以表示为 filename(i).name
文件数量为:length(filename) 方法二:
先在Windows的 MSDOS(命令行)中使用以下命令生成一个list.txt文件: dir path\\folder /on /b /s > path\\list.txt 举例:dir d:\\test /on /b /s > d:\\list.txt 然后在matlab中使用:
filename = textread(sFileFullName,'%s');
把所有文件名读取到list细胞矩阵中,最后对filename{i}便可得到各文件名。 (2) 然后是读取文件名的数据并存储: 假设每个文件对应的数据是m*n的,则: CODE:
k = length(filename); Data = zeros(m,n,k); for ii = 1:k
Data(:,:,ii) = yourreadstyle(filename{ii}); %yourreadstyle是对应的文件读取方式的函数 end
2. 连续读取多个文件的数据,并存放在多个矩阵(以文件名命名)中:
假设每个文件对应的数据是m*n的,则以上述第二种文件名读取方法为例: CODE:
k = length(filename); for ii = 1:k
D = yourreadstyle(filename{ii}); eval(*‘Data_’, num2str(ii), ‘ = D;’+); end
3. 文件名命名问题:
文件名为 abc00001,abc00002,... abc00009,abc00010,... abc00099,abc00100,...abc00879. 准备把这些文件名给放到一个数组里面去。 解答: CODE:
a=cell(879,1); for k=1:879
a{k} = sprintf('%.5d',k); end
4. 上述各种文件格式、类型自动识别问题:可以利用正则表达式来处理,使之通用性较强。例如使用以下代码可以自动处理上面提到了例1到例5各种情形,不过由于存在自动判断,对某些例子(如例1)效率自然要低一点,而对于另外的例子(如例3、例5)效率估计要高一点(少用了一个循环)。 CODE:
function [data]=distilldata_eight(infile)
%功能说明:
%将保存数据的原始文件中的数值数据读入到一个data变量中(自动判断数据行) %使用说明:
% infile——原始数据文件名; % data=数据变量 tmpfile='tmp2.mat';
fidin=fopen(infile,'r'); % 打开原始数据文件(.list)
fidtmp=fopen(tmpfile,'w'); % 创建保存数据文件(不含说明文字) while ~feof(fidin) % 判断是否为文件末尾
tline=fgetl(fidin); % 从文件读入一行文本(不含回车键) if ~isempty(tline) % 判断是否空行
str = '[^0-9 | \\. | \\- | \\s | e | E]'; %正则表达式为:该行中是否包含除 - . E e数字和空白字符外的其他字符
start = regexp(tline,str, 'once'); ifisempty(start)
fprintf(fidtmp,'%s\\n',tline); end end end
fclose(fidin); fclose(fidtmp);
data=textread(tmpfile); delete(tmpfile)
5. 大量数据的读取问题:
可以考虑使用循环分批读取(特别是在各数据是独立的时候),或者使用稀疏矩阵来实现(对此可以参阅本版精华贴: [原创]提高matlab运行速度和节省空间的一点心得(之三))。另外,也可参考《深入浅出MATLAB 7_X混合编程》一书第一章 6. 读取整个txt文件的内容(获得文件中的所有字符): CODE:
f = fopen('yourfilename.txt','rt'); % t 属性根据需要可省略 x = fread(f,'*char'); fclose(f);
7. 把维数不同的矩阵及其变量名保存到一个 txt 文件中,例如 a1 = 123; a2 = [1 2 3;4 5 6] ,希望得到的 txt 文件如下: QUOTE: a1: 123 a2: 1 2 3 4 5 6
如果写入的时候简单一点,则可以采用以下方式,不过读取的时候比较麻烦: CODE: a1=123;
a2=[1 2 3;4 5 6];
fid = fopen('myfile.txt', 'wt'); fori=1:2
fprintf(fid, '%s: \\n %s\\n', ['a',int2str(i)], mat2str(eval(['a',int2str(i)]))); end
fclose(fid);
相反,如果写入的时候复杂一点,则读取的时候会简单一点: CODE: a1=123;
a2=[1 2 3;4 5 6];
fid = fopen('myfile.txt', 'wt'); fori=1:2
fprintf(fid, '%s: \\n', ['a',int2str(i)]); b = eval(['a',int2str(i)]);
fprintf(fid, [repmat('%d ', 1, size(b,2)), '\\n'], b'); end
fclose(fid);
正在阅读:
数据的读取09-14
小学体育《篮球—运球》教学设计资料03-08
我们班的女生作文800字07-02
吹气球大赛作文300字06-25
20年后的家乡作文450字(精彩7篇)03-24
英语六级阅读练习心得07-26
2013陈印题目05-13
游恭王府作文700字07-13
XX化工生产实训报告01-08
2012考研政治毛中特冲刺视频课程讲义07-22
- 二甲基甲酰胺安全技术说明书
- 南邮计算机网络复习题
- 高分子物理实验指导书 - 图文
- 2009.9.25 莞惠环控专业施工图设计技术要求
- 学生工作简报
- 揭阳市斯瑞尔环境科技有限公司废酸综合利用项目可行性研究报告-广州中撰咨询
- 今日靓汤(佘自强)
- 奥数 - 二年级 - 数学 - 第三讲时间的教师版计算答案 - 图文
- 如何命制一份好的物理试卷
- 数据库开题报告
- 禁用未经批准或已经废止或淘汰技术的制度流程
- 大学英语(二)第2阶段测试题
- 湘教版一年级上册美术教案(全)
- (整套)学生顶岗(毕业)实习手册
- 高频 二极管包络检波 - 图文
- 2018届中考英语复习题型四任务型完形填空备考精编含解析 - 186
- 郑煤集团超化煤矿一采区开采设计 - 图文
- 财政学习题
- 摄影摄像复习资料
- SMC D-A93接线方式 - 图文
- 读取
- 数据
- 利用CCS3.3版本TMS320F2808例程,搭建CCS5.1版本工程
- 大港中成螺杆钻具使用手册(中文-中成马达) - 图文
- 2018-2024年中国小龙虾行业前景研究与市场需求预测报告(目录) - 图文
- 0539-中国古代文学史(二)
- 黄田水电站机组甩负荷试验
- 2019-2020年(秋)八年级政治上册 第2课 我与父母交朋友教案1 新人教版 doc
- 高考备考资料 - 2015年高考:新材料作文“懒蚂蚁与勤蚂蚁”作文导写及例文(整理精校版)
- 广播电视概论期末复习
- 2013年四川省乐山市中考数学试卷(word版)
- 陌拜话术 - 图文
- 西安某教学楼定位测量放线施工方案 - secret
- 011浅析HX公司员工激励存在的问题及对策(二级人力资源管理师统考论文)
- POS收单业务管理 - 图文
- 微型计算机及其接口技术-2319-200701
- 莆田学院 - 信息工程学院 - 项目对接材料
- 恋爱策划书参考四篇
- 乌丢丢奇遇记读书汇报课
- 4.杆塔组立专项施工方案 - 图文
- 阅读(现代文):如何领会作品内涵
- 基于FPGA任意倍数分频器设计