zxCoder
V2EX  ›  问与答

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

  •  
  •   zxCoder · Jan 2, 2021 · 2128 views
    This topic created in 2140 days ago, the information mentioned may be changed or developed.
    key1:value1
    key2:value2,value3,value4
    key3:value5,value6,
       value7,value8  [同一个 key 的 value 多行] 
       
    body  [多行] 
    

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

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

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

    然后解析的时候可以 逐行读取,每行根据冒号分隔即可 拿到 key 和 value, 读到两个换行符的时候 就说明头读完了。 然后转到解析的 body 的算法,继续往下读就好了
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   4325 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 108ms · UTC 08:48 · PVG 16:48 · LAX 00:48 · JFK 03:48
    ♥ Do have faith in what you're doing.