读取CSV并生成具有读取的字段名称的文本文件

时间:2018-07-17 23:52:13

标签: perl csv parsing text

我有一个看起来像这样的CSV文件:

Min KTI AD VNA credits per CHA,,,1,Soc/Pac,P-LCC,P-LCC,P-MCC,P-MCC,P-MHCC,P-MHCC,P-HCC,P-HCC,P-HCC,P-HCC,P-HCC,P-HCC,P-HCC,P-HCC,P-HCC,P-HCC,,,,,,,,,
Total K2K AD VNA credits,,,12,Chop/Segment,EP-LCC,EP-LCC,EP-MCC,EP-MCC,EP-MHCC,EP-MHCC,XCC,XCC,EP-HCC,EX-HCC,EX-HCC,EX-HCC,EX-HCC,EX-HCC,EX-HCC,XCC,,,,,,,,,
Min K2K AD VNA per KTI,,,6,Max KTI,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,,,,,,,,,
Max KTI AD VNA credits shared by IIO,,,4,Active KTI 
Min KTI AD VNA credits per CHA,,,1,Soc/Pac,P-LCC,P-LCC,P-MCC,P-MCC,P-Stops,3,3,3,3,3,3,4,4,4,3,3,3,3,3,3,4,,,,,,,,,
Total K2K BL VNA credits,,,4,Config Name,EP-1S,EP-2S,EP-1S,EP-2S,EP-1S,EP-2S,EP-1S,EP-2S,EP-2S,EX-1S,EX-2S,EX-2S,EX-4S,EX-4S,EX-8S,EX-4S,,,,,,,,,

我正在尝试读入此文件并生成名称为ep_hcc_2s_XXX_lm_por_credits.e之类的空文本文件。

CSV的所有EP-部分都成为文本文件名的第一部分,所有数字后跟一个'S'成为文本文件名的第二部分,后跟_XXX_lm_por_credits.e会附加在文件名后面。

我希望在Perl中做到这一点。

1 个答案:

答案 0 :(得分:-1)

您的问题非常晦涩。您不仅在每行数据中都放置了两个换行符,而且还没有解释数据与所需文件名之间的对应关系

一些侦探工作表明,您的数据似乎是按列

转置此数据将得到类似的行

P-LCC|EP-LCC|2|undef|P-LCC|EP-1S

第十四行是

P-HCC|EP-HCC|2|undef|3|EP-2S

与您请求的输出相对应。 “页眉”第五行看起来像

Soc/Pac|Chop/Segment|Max KTI|Active KTI|Soc/Pac|Config Name

因此,您似乎希望将Chop/SegmentConfig Name(转置数据的第二列和第六列)制成文件名。

这就是这段代码的作用

use strict;
use warnings 'all';
use feature 'say';

use List::Util 'max';

# Read and split the data
my @data = map { chomp; [ split /,/ ]; } <DATA>;

# Find the last element of the longest row
my $n = max map { $#$_ } @data;

# Pull out columns two and six of each row and build filename
for my $i ( 0 .. $n ) {

    my @row           = map { $_->[$i] } @data;
    my ($chop, $conf) = @row[1,5];

    next unless $chop and $conf;
    next unless $chop =~ s/^EP\K-/_/ and $conf =~ s/^EP-//;

    my $filename = sprintf '%s_%s_XXX_lm_por_credits.e', map lc, $chop, $conf;
    say $filename;
}


__DATA__
Min KTI AD VNA credits per CHA,,,1,Soc/Pac,P-LCC,P-LCC,P-MCC,P-MCC,P-MHCC,P-MHCC,P-HCC,P-HCC,P-HCC,P-HCC,P-HCC,P-HCC,P-HCC,P-HCC,P-HCC,P-HCC,,,,,,,,,
Total K2K AD VNA credits,,,12,Chop/Segment,EP-LCC,EP-LCC,EP-MCC,EP-MCC,EP-MHCC,EP-MHCC,XCC,XCC,EP-HCC,EX-HCC,EX-HCC,EX-HCC,EX-HCC,EX-HCC,EX-HCC,XCC,,,,,,,,,
Min K2K AD VNA per KTI,,,6,Max KTI,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,,,,,,,,,
Max KTI AD VNA credits shared by IIO,,,4,Active KTI 
Min KTI AD VNA credits per CHA,,,1,Soc/Pac,P-LCC,P-LCC,P-MCC,P-MCC,P-Stops,3,3,3,3,3,3,4,4,4,3,3,3,3,3,3,4,,,,,,,,,
Total K2K BL VNA credits,,,4,Config Name,EP-1S,EP-2S,EP-1S,EP-2S,EP-1S,EP-2S,EP-1S,EP-2S,EP-2S,EX-1S,EX-2S,EX-2S,EX-4S,EX-4S,EX-8S,EX-4S,,,,,,,,,

输出

ep_lcc_1s_XXX_lm_por_credits.e
ep_lcc_2s_XXX_lm_por_credits.e
ep_mcc_1s_XXX_lm_por_credits.e
ep_mcc_2s_XXX_lm_por_credits.e
ep_mhcc_1s_XXX_lm_por_credits.e
ep_mhcc_2s_XXX_lm_por_credits.e
ep_hcc_2s_XXX_lm_por_credits.e
相关问题