中英数字混合文本的数字提取

以前处理陀螺数据文本文件,里面有中文、英文,MATLAB导入数据识别起来比较麻烦。

对象:中英数字混合的、行列对其的文本。例如如下文本内容(可以保存为matlab.txt跑下实例程序):

序号          传输方向  接收时间标识       帧ID        帧格式  帧类型  数据长度   数据
0 接收   0x05be9f80          0x00000003  数据帧  扩展帧  0x08       ff 3f fe fe ed 63 00 02 
1 接收   0x05be9f88          0x00000004  数据帧  扩展帧  0x08       03 10 00 00 22 01 00 00 
2 接收   0x05be9f8e          0x00000001  数据帧  扩展帧  0x08       00 00 00 00 01 34 00 00 
3 接收   0x05be9f96          0x00000002  数据帧  扩展帧  0x08       00 ab 00 48 ee ff 00 01 
4 接收   0x05be9f9e          0x00000003  数据帧  扩展帧  0x08       ff 32 ff ff ea 6d 00 09 

5 接收   0x05be9fa6          0x00000004  数据帧  扩展帧  0x08       07 a0 00 00 e4 b1 00 00 

。。。。。。

目的:中英数字混合文本的数字提取。需要提取本文中 0x08 后面的16进制数据。且文件中 帧ID为 0x00000001 - 0x00000004才为一个完整的帧数据,下面程序里面用i,j控制取到正确顺序的四帧数据。

实例:(有参考网上部分)

clear all;
close all;
fidin=fopen('C:\Users\Administrator\Desktop\canshuju.txt'); %文件形式读入
fidout=fopen('matlab.txt','wt');  % 创建matlab.txt文件
i=0;j=0;
while ~feof(fidin)   % 判断是否为文件末尾               
    tline=fgetl(fidin);  % 从文件读行   
    
    ind1=strfind(tline,'0x00000001');%找到文件中的字符串0x00000001,可以为中文
    strlen1=strfind(tline,'0x08');%找到文件中的字符串0x08
    if ~isempty(ind1 & strlen1)%从读取的行里面同时找到上述两个字符串标志,表示是一个完整的行
      b1=tline(strlen1+6:strlen1+34);%从读取的行里面提取字符串0x08后面的有用的数据,注意偏移量
      if i==0
        i=i+1;
      end
    end
    
    ind2=strfind(tline,'0x00000002');%找到文件中的字符串0x00000002
    strlen2=strfind(tline,'0x08');%找到文件中的字符串
    if ~isempty(ind2 & strlen2)
      b2=tline(strlen2+6:strlen2+34);
     
      if i==1
        i=i+1;
      end
    end
    
    ind3=strfind(tline,'0x00000003');%找到文件中的字符串
    strlen3=strfind(tline,'0x08');%找到文件中的字符串
    if ~isempty(ind3 & strlen3)
      b3=tline(strlen3+6:strlen3+34);
         
      if i==2
        i=i+1;
      end   
    end
    
    ind4=strfind(tline,'0x00000004');%找到文件中的字符串
    strlen4=strfind(tline,'0x08');%找到文件中的字符串
    if ~isempty(ind4 & strlen4)
      b4=tline(strlen4+6:strlen4+34);
     
     if i==3
        i=i+1;
     end
    end
    
    if i==4
     fprintf(fidout,'55 99 %s %s %s %s 66\n',b1,b2,b3,b4);   %\t制表 \n回车%加上55 99   66重新组帧
     i=0;

    end 


      continue    

end

 fclose(fidout);


%补充说明:有的时候数据没对齐,多了一些字符比如℃或者V、:等,在保持的文本中用strrep(b4,'℃','')函数可以去掉。

参考此例子,对于单行提取的的就更简单了,请自行解决。

希望可以帮到一些人,为分享精神做点贡献。大神请无视。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值