找回密码
 注册
Simdroid-非首页
查看: 155|回复: 6

matlab 数据处理程序 有文字行,数字行,空行,

[复制链接]
发表于 2010-11-16 14:01:39 | 显示全部楼层 |阅读模式 来自 甘肃兰州
试验数据 有文字行,数字行,空行,想提取数据并绘图
现有如下程序,可是只读到空行便退出了,请问大家这种情况怎么处理。程序应该怎么修改。


fidin=fopen('shuju.txt');                                                % 打开shuju.txt文件              
fidout=fopen('chulihou.txt','w');                                     % 创建chulihou.txt文件
while ~feof(fidin)                                                            % 判断是否为文件末尾         
     tline=fgetl(fidin);                                                       % 从文件读行      
   if double(tline(1))>=48&&double(tline(1))<=57          % 判断首字符是否是数值
      fprintf(fidout,'%s\n',tline);                                       % 如果是数字行,把此行数据写入文件chulihou.txt
        continue                                                              % 如果是非数字继续下一次循环
   
   end
end
fclose(fidout);
data=textread(fidout);


数据如下:
Temperature -13 deg_C
Operator Information End
Data Acquisition   Preload Data   Time: 42.833984 Sec 11/8/2010 1:51:33 PM
Time Axial Displacement Axial Force Confining Displacement Confining Pressure

Sec mm kN mm MPa
12.234619 25.866014 -0.28899339 130.95151 0.032512732
40.234619 0.0014054775 -0.97908342 135.41354 0.28755701
40.734619 0.0022423267 -0.97924072 135.44521 0.29236361
41.234619 0.0018614531 -0.99580288 135.47627 0.29657686
41.734619 0.0026661158 -1.0136685 135.51547 0.30159634
42.234619 0.002438128 -1.0365298 135.54652 0.30553156
42.734619 0.0015449524 -1.0270188 135.57671 0.30974835

Data Acquisition   Hold Data   Time: 1842.8442 Sec 11/8/2010 2:21:34 PM
Time Axial Displacement Axial Force Confining Displacement Confining Pressure
Sec mm kN mm MPa

43.842773 0.0012686849 -1.0467416 135.63153 0.3153342
44.842773 0.00112921 -1.0617769 135.6525 0.31523082
45.842773 0.00036478043 -1.0623968 135.65942 0.31372055
46.842773 0.00070810318 -1.0411634 135.66548 0.31334537
47.842773 0.00083953142 -1.075087 135.66881 0.31109512
48.842773 0.00083953142 -1.0482372 135.66808 0.31025884
87.842773 0.00054717064 -1.0151838 135.71162 0.30354327

Data Acquisition   Hold Data   Time: 1842.8442 Sec 11/8/2010 2:21:34 PM
Time Axial Displacement Axial Force Confining Displacement Confining Pressure
Sec mm kN mm MPa

43.842773 0.0012686849 -1.0467416 135.63153 0.3153342
44.842773 0.00112921 -1.0617769 135.6525 0.31523082
45.842773 0.00036478043 -1.0623968 135.65942 0.31372055
46.842773 0.00070810318 -1.0411634 135.66548 0.31334537
47.842773 0.00083953142 -1.075087 135.66881 0.31109512
48.842773 0.00083953142 -1.0482372 135.66808 0.31025884
87.842773 0.00054717064 -1.0151838 135.71162 0.30354327

Data Acquisition   Hold Data   Time: 1842.8442 Sec 11/8/2010 2:21:34 PM
Time Axial Displacement Axial Force Confining Displacement Confining Pressure
Sec mm kN mm MPa

43.842773 0.0012686849 -1.0467416 135.63153 0.3153342
44.842773 0.00112921 -1.0617769 135.6525 0.31523082
45.842773 0.00036478043 -1.0623968 135.65942 0.31372055
46.842773 0.00070810318 -1.0411634 135.66548 0.31334537
47.842773 0.00083953142 -1.075087 135.66881 0.31109512
48.842773 0.00083953142 -1.0482372 135.66808 0.31025884
87.842773 0.00054717064 -1.0151838 135.71162 0.30354327
发表于 2010-11-16 16:21:01 | 显示全部楼层 来自 辽宁沈阳
Simdroid开发平台
fidin=fopen('shuju.txt');                                                % 打开shuju.txt文件              
fidout=fopen('chulihou.txt','w');                                     % 创建chulihou.txt文件
while ~feof(fidin)                                                            % 判断是否为文件末尾         
     tline=fgetl(fidin);  % 从文件读行
     
   if length(tline)>0&&tline(1)>='0'&&tline(1)<='9'          % 判断首字符是否是数值
      fprintf(fidout,'%s\r\n',tline);                                       % 如果是数字行,把此行数据写入文件chulihou.txt
        continue                                                          % 如果是非数字继续下一次循环
   
   end
end
fclose(fidout);
空行时候tline长度为0 读不到tline(1)

评分

1

查看全部评分

回复 不支持

使用道具 举报

 楼主| 发表于 2010-11-16 19:42:46 | 显示全部楼层 来自 甘肃兰州
太感谢了:victory:
回复 不支持

使用道具 举报

 楼主| 发表于 2010-11-16 23:23:58 | 显示全部楼层 来自 甘肃兰州
如上,处理的好数据想用其中第二三列分别作x、y轴绘图,下面的程序问题在哪儿,请教。谢谢。

fidin=fopen('shuju.txt','r');                                 % 打开shuju.txt文件              
fidout=fopen('chulihou.txt','w');                             % 创建chulihou.txt文件
while ~feof(fidin)                                            % 判断是否为文件末尾         
     tline=fgetl(fidin);  % 从文件读行     
   if length(tline)>0&&tline(1)>='0'&&tline(1)<='9'           % 判断首字符是否是数值
      fprintf(fidout,'%s\r\n',tline);                         % 如果是数字行,把此行数据写入文件chulihou.txt
        continue                                              % 如果是非数字继续下一次循环   
   end
end

whos;
a=fopen('chulihou.txt');
x=a(:,[2]);
y=a(:,[3]);
plot(x,y)
回复 不支持

使用道具 举报

发表于 2010-11-16 23:55:32 | 显示全部楼层 来自 黑龙江哈尔滨
大哥啊,a只是文件句柄,并不是数据,如果相对数组操作可以用load
a = load chulihou.txt ;%建议将文件名改成ChuLiHou或chu_li_hou这样不是更好吗?当然建议使用英文名
x = a(: ,2) ;
y = a(: ,3) ;
plot(x, y) ;

评分

1

查看全部评分

回复 不支持

使用道具 举报

 楼主| 发表于 2010-11-17 12:51:26 | 显示全部楼层 来自 甘肃兰州
谢谢指点,可是提示出错不知道是什么原因,不能运行。
再帮忙看看,万分感谢!

fidin=fopen('shuju.txt','r');                                 % 打开shuju.txt文件              
fidout=fopen('chulihou.txt','w');                             % 创建chulihou.txt文件
while ~feof(fidin)                                            % 判断是否为文件末尾         
     tline=fgetl(fidin);  % 从文件读行     
   if length(tline)>0&&tline(1)>='0'&&tline(1)<='9'           % 判断首字符是否是数值
      fprintf(fidout,'%s\r\n',tline);                         % 如果是数字行,把此行数据写入文件chulihou.txt
        continue                                              % 如果是非数字继续下一次循环   
   end
end

whos;
a = load chulihou.txt
x = a(: ,2) ;
y = a(: ,3) ;
plot(x, y) ;
回复 不支持

使用道具 举报

 楼主| 发表于 2010-11-17 13:12:04 | 显示全部楼层 来自 甘肃兰州
解决了,谢谢大家!

a = load ('chulihou.txt');
回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-4-29 01:09 , Processed in 0.036531 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表