加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

正则表达式 – 用Perl替换引号和多个逗号分隔符

发布时间:2020-12-14 05:49:28 所属栏目:百科 来源:网络整理
导读:参见英文答案 Replace commas with pipes,but not the commas enclosed in double quotes????????????????????????????????????3个 我有一个非常大的文件,我需要用Perl解析.最初编写的文件格式(我无法更改)允许文件在Excel中以CSV格式打开.特别是对于这个问
参见英文答案 > Replace commas with pipes,but not the commas enclosed in double quotes????????????????????????????????????3个
我有一个非常大的文件,我需要用Perl解析.最初编写的文件格式(我无法更改)允许文件在Excel中以CSV格式打开.特别是对于这个问题,我需要用管道(|)替换每一行中的分隔符.通常这不是一项艰苦的工作,但我有一些问题(下面),虽然我确实有一个解决方案,但我想知道是否有更有效的方法来完成我的任务.

>数据本身包含带逗号的注释(意味着我无法在逗号中找到并替换)
>每个“单元格”的数据都封装在引号中,但如果单元格为空,则不存在引号

示例行文件:

"Foo Bar","More Foo","More Bar","Yet More","Comma,Separated,Statement"

我目前的解决方案类似于下面的代码.它工作,但它似乎不优雅,需要多次处理每一行(我想避免的事情,因为这个文件非常大).

# Change the delimiter
$line =~ s/","/|||||/g;
$line =~ s/","/||||/g;
$line =~ s/","/|||/g;
$line =~ s/","/||/g;
$line =~ s/","/|/g;

$line =~ s/^"//;     # Remove leading quotation mark
$line =~ s/"$//;     # Remove trailing quotation mark

那里的任何人都可以帮我找到更快更优雅的解决方案吗?

解决方法

使用 Text::CSV_XS.读取每一行,获取每个值,然后使用管道重新加入.让模块为您处理所有格式问题.

请参阅friedo’s answer至Replace commas with pipes,but not the commas enclosed in double quotes中的代码.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读