【问题标题】:Use Perl to Read input .csv file, bring to array and extract to expected output使用 Perl 读取输入 .csv 文件,带入数组并提取到预期输出
【发布时间】:2018-03-21 12:51:06
【问题描述】:

我收到了使用数组 uniq 制作 perl 脚本的请求,

我的@filtered = uniq(@array);

但是不知道perl怎么编码

任何人都可以帮助我,不胜感激..

================================================ =======

1) 输入.csv文件:

ATPG         TCD             tcd/T1, xxx/tcd/T2        
ATPG         INSTANCE        inst1/I1, xxx/inst2/I2, inst3/I3   
ATPG         PATTERN         pat1/P1, pat2/P2   
SIM          BLACKBOX        bb1/B1, bb2/B2

2) 请求:

第 1 步:读取输入 .csv 文件

第 2 步:使用预期内容创建输出 out.txt

================================================ =======

3) 输出 out.txt(如果(第 1 列 = ATPG))

// TCD

read_core_description     tcd/T1
read_core_description     xxx/tcd/T2

// INSTANCE
add_core_instance  -instance inst1/I1  
add_core_instance  -instance xxx/inst2/I2   
add_core_instance  -instance inst3/I3

//PATTERN 
read_patterns pat1/P1  
read_patterns pat2/P2

================================================ =======

我当前的代码在这里,请帮助在最后继续

#1) Open input
my $inF="input.csv";
open( my $inF_var, "<", $inF) || die ("Can't open input file\n");

#2) Open output
my $outF_Blk="output/out.txt";

open( my $outF_Blk_var,  ">$outF_Blk") || die ("Can't open output file");


#3) Write to files
while( <$inF_var> ){
next if (/^$/);
my $line=$_;

my @value=split(/:/, $line);

# EXTRACT THE EXPECTED OUTPUT HERE # 
### NEED EVERYONE CAN HELP ####

【问题讨论】:

  • 你试过什么?你有什么问题?请向我们展示您的代码。如果您还没有任何代码,那么 Stack Overflow 不是您提出问题的最佳场所。
  • @DaveCross: 是的,我可以使用 perl 读取 .csv 文件,但不知道如何适应上述要求,这就是我在这里需要帮助的原因,你能提供一些建议吗.谢谢
  • 这真的不能回答我的问题。向我们展示您的代码。
  • 有很多方法可以做到这一点,一种选择是使用 3 个数组作为 TCD / INSTANCE / PATTERN 每个数组,并在读取输入时填充它们,然后根据需要打印输出。
  • @DaveCross: ,我已将代码更新为上述主题

标签: arrays perl csv


【解决方案1】:

我只实现了一种输出类型。其他的应该很容易添加。

#!/usr/bin/perl

use strict;
use warnings;

use feature 'say';

my %process = (
  TCD      => \&process_tcd,
  INSTANCE => \&process_instance,
  PATTERN  => \&process_pattern,
);

while (<DATA>) {
  my ($type, $cmd, @row) = split /[\s,]+/;

  next unless $type eq 'ATPG';

  if (!exists $process{$cmd}) {
    warn "Unknown record type: $_";
    next;
  }

  $process{$cmd}->(@row);
}

sub process_tcd {
  my @data = @_;

  say "//TCD\n";
  say "read_core_description    $_" for @data;
  say '';
}

sub process_instance {}
sub process_pattern {}

__DATA__
ATPG         TCD             tcd/T1, xxx/tcd/T2        
ATPG         INSTANCE        inst1/I1, xxx/inst2/I2, inst3/I3   
ATPG         PATTERN         pat1/P1, pat2/P2   
SIM          BLACKBOX        bb1/B1, bb2/B2

【讨论】:

  • 太棒了。非常感谢。只有 1 条注释,我的 perl 中没有“say”功能。所以,我将“say”更改为“print”
  • @KhanhNguyen: say() 在 2007 年被添加到 Perl 5.10。你应该使用支持它的版本。
猜你喜欢
  • 2020-04-04
  • 1970-01-01
  • 1970-01-01
  • 2018-08-07
  • 2019-08-07
  • 2017-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多