原始时间戳是毫秒级的,单帧最大计数值过65535。
你这个脚本为了省内存,把时间戳塞进了16位整型变量里,数据量一大了自然溢出崩溃。
我换成无符号长整型,又加了两个溢出判断分支,就好了。”
他说得云淡风轻的,跟解释一加一等于二似的。
而李哥盯着那几行代码,嘴巴微微张着,半天没合拢。
当年这个bug他前前后后折腾了一个礼拜,才算勉强“解决”
了——其实根本没根治,就是绕了个弯子,让脚本每隔两周才崩一次,好歹能凑合用。
他一直以为是数据量太大导致的性能瓶颈,还琢磨过要不要申请加内存。
结果根子就在这儿。
李哥直起身,慢慢摘下眼镜擦了擦,又看了一眼屏幕上那十几行代码,心里头忽然涌上一阵恍惚——前三年像是白活了一样。
韩学涛把u盘从接口里拔出来,随手递过去:“改好了,收起来吧。”
李哥愣愣地接过来,张了张嘴想说点什么,韩学涛已经转回自己电脑前,点开了桌面上“全量历史脏数据清洗”
那个文件夹。
这是于主任交给他的任务。
脏数据清洗这活儿,相当让人头疼。
说白了就是北斗地面站从双星接收到的原始观测数据里,混着各种乱七八糟的东西——信号中断时候的无效帧、卫星仰角太低时记录的不稳定值、设备重启那一瞬间触的错误码。
这些东西不清干净,后面的平差解算根本跑不起来。
三组日常就是写各种规则脚本,一条一条地筛,把这个文件的异常行删掉,把那个字段的越界值置空。
活儿杂、量大、还枯燥。
一个批次跑下来少说大半天,中间还经常因为漏了某种异常类型报错中断。
韩学涛翻开余国平给他的那堆资料里中间某一本,停在其中一页。
那一页写的是北斗原始数据帧结构定义,里面有一个字段被加粗标了出来:数据质量标识码。
规范里写得明明白白,这个码由星上自主判读生成,一共八位,每一位代表一个维度的健康状态。
某位是1,就说明对应维度的数据不可用。
他盯着这一页看了大概两分钟,然后关掉文档,打开清洗脚本编辑器,把原本那几百行筛查逻辑全选、删除、清空。
重新写了一个主循环。
核心逻辑简单清晰:先读每个数据帧头部的质量标识码;质量码不是零的直接跳过,连后面的字段都懒得解析;质量码全是零的,整帧完整保留。
出口处再加一行简单的统计输出,把每类质量码对应的帧数自动汇总成表。
总共就写了二十来行。
保存,运行。
进度条稳稳地往前走,度比原先那个逐字段筛查的脚本快了不知道多少倍。
韩学涛靠在椅背上,看着屏幕上的数字一个一个往上跳,顺手端起搪瓷缸喝了口水。
而那边李哥攥着u盘回了工位,坐下来第一件事不是干活,是呆。
他盯着显示器,脑子里翻来覆去就一个念头:那个bug困扰了自己整整三年,结果人家翻了翻资料就解决了。
三年通宵熬出来的东西,在别人那儿就是几行代码的事儿。
他本来想好了今天要调的一个思路,现在那个思路也变得模糊了。
整个人像被抽空了似的,目光空空洞洞地望着屏幕上那个一闪一闪的光标。
就这么呆坐了半小时。
李哥终于动了动,使劲搓了把脸,从抽屉里摸出饭卡,起身去食堂小卖部买了两罐红牛。
走回来坐定,拉开拉环,仰头灌了一大口。
目光无意间往旁边一瞥,正好看见韩学涛的屏幕上跳出一行字:数据清洗完成。
总计处理记录数:1847329条。
有效保留:1526641条。
异常剔除:320688条。
清洗用时:00:27:43。
李哥嘴里的红牛还没咽下去,“噗”
地一口全喷在自己键盘上。
“全量脏数据清洗?”
他声音都变了调,红牛顺着下巴往下淌也顾不上擦,“你……半个小时就搞完了?”

