1.9 KiB
1.9 KiB
title | updated | created | tags | ||
---|---|---|---|---|---|
数据交错处理 | 2022-03-15 10:10:49Z | 2022-03-14 07:44:29Z |
|
自制串口助手中有一需求,从接收字符串中提取帧数据,提炼后即为 “将一字符串按指定的数组进行分割,先到优先”
算法实现
分为几个部分
算法思路如下:
- 遍历字符串,查找没个数组元素在字符串中的位置i、j,保存的到数组idx
- 若idx不为空,则对idx进行i元素升序排序
- 此时可能存在交错现象(主要原因是数组元素有交错现象),特征是前一组数据的j不小于后一组的i,“先到原则”即剔除后一组数据直到所有数据不存在交错。方法有一是遍历数组,发现交错数据就立即清除(数组大小随之-1),直到无交错再进行下一轮循环,有些复杂。也可利用push操作,符合才push,不符合直接丢弃。 4.剔除交错后,按i,j-1分割原字符串即可
源码
测试代码如下:
import console;
findEx = function(str,p,mode=0){
if(t and type(p) == type.string){
t= ..string.split(p,"|")
}
var idx = {};
for(k,v in p){
for i,j in ..string.gfind(str,v) {
..table.push(idx,{i;j})
}
}
table.sort(idx,function(v){//按第一元素升序排序
for(i=1;#owner;1){
if(owner[i] != v[i]){
return owner[i] < v[i];
}
}
})
if(mode){
var rst = {idx[1]};
for(i=2;#idx;1){
if(idx[i][1] > rst[#rst][2]){
table.push(rst,idx[i])
}
}
idx = rst;
}
return idx;
}
sets = {"fre"={"频率";"MHz"};"amp"={"幅度";"dBm"};"vol"={"电压";"V"};"emp"={"温度";"℃"}}
str = "456ampfre=12213devvol=45temp=?45fre123amp=45646vol4545temp=45645mpfremp=12213vol45temp=?45fre1" ;
var new = {};
table.map(sets,lambda(v,k) table.push(new,k) )
var tmp = findEx(str,new)
console.dump(tmp)
console.pause(true);
#数据筛选 #串口助手