首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >需要帮助识别这段代码到底做了什么(我有一个大致的想法)

需要帮助识别这段代码到底做了什么(我有一个大致的想法)
EN

Stack Overflow用户
提问于 2022-11-09 22:34:20
回答 1查看 36关注 0票数 -1
代码语言:javascript
复制
let $removeLastCR:=fn:replace($output.output_FileContent , '(\r?\n|\r)$', '')
let $lines := tokenize($removeLastCR, '\n')
return

for $line at $counter in $lines
let $x := 
    for $i in fn:tokenize($line,'"')
    return 
        if(fn:starts-with($i,',') and fn:ends-with($i,','))
            then fn:substring($i,2,fn:string-length($i)-2)
        else 
            if(fn:starts-with($i,','))
                then fn:substring-after($i,',')
            else 
                if(fn:ends-with($i,','))
                    then fn:substring($i,1,fn:string-length($i)-1)
                else $i
let $fields :=
    for $j at $k in $x
    return 
    if(fn:starts-with($line,'"'))
        then 
            if($k mod 2 = 0)
                then fn:tokenize($j,',')
            else $j
    else 
        if($k mod 2 = 0)
            then $j
        else fn:tokenize($j,',')
return

真正的问题是,我试图理解为什么对下面的数据记录进行解析失败,但是对文件中的其余数据(File是一个.CSV文件)有效:

xyz@example.com,XYZ LastName,Merchant,15/08/2022,199.98,美元,199.98,美元,61001,xyz@example.com R1111111,"Qty 10-4“”X4“”X 5.7“-颜色:自定义框1,XYZ,CC 8月1日,R1111111,P&E : PS,妈妈,政策,CCP,https://www.example.com/report?reportID=R1111111,cdf,1234XXXXXX5678,https://example.com

对于上面的记录,代码应该将每个逗号分隔的值解析到它自己的字段中(Field1: xyz@example.com、Field2: XYZ LastName等),但我认为它在字段值“Qty10-4”“X4”“X5.7”“- Color: Custom 1”上会出现分叉。它应该将整个值解析为一个字段,但是它只将“Qty10-4”输入到Field#13中,而且之后的所有字段也都没有被正确地解析。

因此,我试图更好地理解这段代码(是别人编写的),这样我就可以进行适当的更改来处理这个场景。

EN

回答 1

Stack Overflow用户

发布于 2022-11-10 08:49:18

CSV语法有很多变体,看起来这个数据文件使用的是在引用字段中通过加倍引号转义"的约定。但是,解析CSV的查询代码并不试图处理此类转义引号。

很容易告诉您每一行代码做什么,但我怀疑这不是您的问题。更难的是理解整个逻辑。

第一部分通过在$x上标记并从每个令牌中移除前导和尾随逗号来创建变量"。这对我来说毫无意义。第二部分则取没有引号的标记,并将它们拆分到",“分隔符上。

我认为这段代码已经被破坏了,当然不能扩展到处理通过加倍转义的引号。它需要重写。我不认为简单的标记就能做到这一点。

googling显示了CSV到XML转换器的各种尝试。不幸的是,他们中很少有人非常明确地知道他们处理的CSV到底是什么味道,而且许多人甚至没有尝试在引用的字段中处理逗号。不太满意,但我恐怕在我允许自己回答StackOverflow问题的10分钟内写一个更好的答案是不可能的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74382156

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档