V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
zxCoder
V2EX  ›  问与答

解析这种格式的文本文件有什么好的思路吗

  •  
  •   zxCoder · 2021-01-02 21:48:21 +08:00 · 1356 次点击
    这是一个创建于 1420 天前的主题,其中的信息可能已经有所发展或是发生改变。
    key1:value1
    key2:value2,value3,value4
    key3:value5,value6,
       value7,value8  [同一个 key 的 value 多行] 
       
    body  [多行] 
    

    格式大概是这样的,有什么解析的好思路吗,按行读取然后判断好难写

    14 条回复    2021-01-06 15:29:24 +08:00
    delectate
        1
    delectate  
       2021-01-02 22:05:40 +08:00
    格式化为 json 吧。
    qq292382270
        2
    qq292382270  
       2021-01-02 22:14:47 +08:00
    数组=按行分割(全部文本)
    循环数组,每行判断是否有符号:
    有的话,符号:左边是 key,右边是 value(value 按符号,分割)
    没有的话,代表这行全是 value(按符号,分割,归于上一个 key)
    ysc3839
        3
    ysc3839  
       2021-01-02 22:39:12 +08:00 via Android
    body 的内容呢?空的?
    lululau
        4
    lululau  
       2021-01-02 23:38:35 +08:00 via iPhone
    body 是个什么鬼,和 kv pairs 是个什么关系?能不能好好提问
    xiangyuecn
        5
    xiangyuecn  
       2021-01-02 23:43:41 +08:00
    邮件头 解析,也会存在第四行这种 被切成好几段的

    关键在于第一个连续的两个换行符,是区分头和 body 的,这个规则跑不了
    xupefei
        6
    xupefei  
       2021-01-02 23:55:32 +08:00   ❤️ 2
    写个简单的自动机就行了,在 value 状态下忽略空格和单换行
    iseki
        7
    iseki  
       2021-01-03 01:30:15 +08:00 via Android
    建议描述成 BNF (然后你就不用问了(
    treblex
        8
    treblex  
       2021-01-03 08:31:59 +08:00 via iPhone
    是 http 请求的格式吗
    nerocc
        9
    nerocc  
       2021-01-03 08:38:11 +08:00 via Android
    写个简单的 lexer 呗
    weyou
        10
    weyou  
       2021-01-03 10:31:54 +08:00 via Android
    有点像 mime 邮件格式
    raaaaaar
        11
    raaaaaar  
       2021-01-03 11:43:23 +08:00 via Android
    你先说这是什么格式。。
    learningman
        12
    learningman  
       2021-01-03 11:51:02 +08:00 via Android
    找换行符,找:不就好了
    DOLLOR
        13
    DOLLOR  
       2021-01-03 12:01:56 +08:00 via Android
    太像 http 报文了,就当 http 报文解析吧。
    Joker123456789
        14
    Joker123456789  
       2021-01-06 15:29:24 +08:00
    建议约束一下,value 不要换行,不然很蛋疼。

    然后解析的时候可以 逐行读取,每行根据冒号分隔即可 拿到 key 和 value, 读到两个换行符的时候 就说明头读完了。 然后转到解析的 body 的算法,继续往下读就好了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3101 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 00:15 · PVG 08:15 · LAX 16:15 · JFK 19:15
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.