先做一件事:把工具当前能接受的输入格式当作唯一事实来源,而不是沿用你上次成功时的记忆。改输入规范的本质,是让待处理对象与工具解析器之间重新对齐。具体做法是取一条真实数据,逐字段比对工具报错或静默丢弃的位置,再决定是改数据、加一层转换,还是换处理路径。
“格式变了”通常有三种来源,处理方式完全不同。第一种是工具本身升级了解析规则,比如原本按逗号切分的字段改成必须带引号;第二种是数据源改了导出格式,比如从制表符分隔变成嵌套结构;第三种是你把工具用在了新对象上,旧规范从未覆盖它。
区分方法很简单:拿一条旧数据跑一次。旧数据通过、新数据失败,问题在数据源;旧数据也失败,问题在工具规则。这个判断决定了你接下来是改上游导出,还是改自己的输入规范。
不要一次性改整批数据。选一条结构最完整、又确实会失败的样本,把它拆成最小字段单元,逐个送入工具,观察每个字段被接受、被改写还是被拒绝。
把这三个观察结果记成一张对照表,左列是工具期望的形态,右列是你手上的形态。这张表就是新输入规范的草稿,而不是凭印象重写一份说明。
确认差异后,你有两个成立条件不同的选择。
选择一:在数据侧做转换。当工具规则稳定、且你无法影响工具时成立。做法是加一个中间步骤,把源数据转成工具期望的格式再送入。代价是每次上游变化都要维护这段转换逻辑,好处是不用改动已经跑通的工具配置。
选择二:改输入规范本身。当同一类对象会持续以新格式出现、且转换逻辑越来越复杂时成立。做法是重新定义规范,明确必填字段、类型、分隔符和空值表示,再让上游按规范产出。代价是上游可能要配合调整,好处是长期维护成本更低。
判断依据是变化频率:一次性变化用转换,反复出现的变化改规范。
假设某工具原本接受每行一条、字段用制表符分隔的文本,现在你的数据源改为每行一条、字段用逗号分隔,且某个字段内部本身含逗号。
直接替换分隔符会失败,因为含逗号的字段会被切错。此时可选路径有两条:一是给含逗号的字段加引号,让工具按引号边界识别;二是把该字段内部的逗号替换为其他不会冲突的符号,并在规范里注明这种替换。前者保留原始语义,后者需要在使用端还原。
假设你选择加引号,那么规范里必须同时写明:字段含分隔符时加引号、引号本身如何转义、空字段是否也加引号。写完这三条后,再用同一条样本验证一次。如果验证通过,下一步是把规范应用到全部数据并抽查首尾各若干条;如果仍失败,说明还有未覆盖的字段类型,回到字段映射表继续排查。
规范不能只写“格式要正确”,要写成能逐条打勾的检查项,否则下次还会卡在同一个遗漏条件上。
最后一步是把这份规范与工具的实际行为再对一次。规范描述的是你期望工具接受什么,工具实际接受什么才是最终依据。两者不一致时,以工具当前行为为准更新规范,并记录这次差异,避免下次重复排查。具体工具支持的格式细节需要以你所用版本的说明或实际测试为准,不同工具之间不可直接套用。