loveblue 发表于 2010-11-16 14:01:39

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

试验数据 有文字行,数字行,空行,想提取数据并绘图
现有如下程序,可是只读到空行便退出了,请问大家这种情况怎么处理。程序应该怎么修改。


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

xuxu1457 发表于 2010-11-16 16:21:01

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)

loveblue 发表于 2010-11-16 19:42:46

太感谢了:victory:

loveblue 发表于 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(:,);
y=a(:,);
plot(x,y)

zhouyang664 发表于 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) ;

loveblue 发表于 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) ;

loveblue 发表于 2010-11-17 13:12:04

解决了,谢谢大家!

a = load ('chulihou.txt');
页: [1]
查看完整版本: matlab 数据处理程序 有文字行,数字行,空行,