我正在处理遗留数据,通常采用以下格式:
QID RESPONSE
Run Code Online (Sandbox Code Playgroud)
但是在某些情况下,响应包含多个不同类型的值:
01320 2,35,6,"warm"
Run Code Online (Sandbox Code Playgroud)
我试过用
my @dataRowAsList = split('\t', $_);
my $questionID = $dataRowAsList[0];
my $response = substr($dataRowAsList[1],0,-2);
my @thisResponse = split(',', $response);
Run Code Online (Sandbox Code Playgroud)
在相关案例中将输出分解为问题和响应,然后将每个响应分解为组成部分
但是我刚刚发现了这种情况:
01320 2,35,6,"warm,windy"
Run Code Online (Sandbox Code Playgroud)
引号中的逗号不会被转义
有没有一种巧妙的方法将其解析为其组件?
2
35
6
"warm,windy"
Run Code Online (Sandbox Code Playgroud)
从字符串中读取Text :: CSV用法的快速示例:
#!/usr/bin/perl
use warnings;
use strict;
use feature qw/say/;
use Text::CSV;
my $str = q/01320 2,35,6,"warm,windy"/;
my $csv = Text::CSV->new({auto_diag => 2});
my @fields = split " ", $str, 2;
say '$fields[0] is ', $fields[0];
say '$fields[1] is ', $fields[1];
say 'Parsed out $fields[1] is:';
$csv->parse($fields[1]);
say for $csv->fields;
Run Code Online (Sandbox Code Playgroud)
运行这将产生:
$fields[0] is 01320
$fields[1] is 2,35,6,"warm,windy"
Parsed out $fields[1] is:
2
35
6
warm,windy
Run Code Online (Sandbox Code Playgroud)
这是一个非核心模块,因此您必须使用您最喜欢的CPAN客户端或操作系统的软件包管理器进行安装.如果这样做也不会自动安装Text :: CSV_XS,您可能也希望这样做以获得一个优化的实现,Text::CSV如果存在则自动使用.
| 归档时间: |
|
| 查看次数: |
85 次 |
| 最近记录: |