如何在perl中为模式匹配的键添加值

waxmsbnn  于 2022-11-15  发布在  Perl
关注(0)|答案(1)|浏览(169)

我正在学习perl散列,我在一个点上卡住了。你能帮我解决这个问题吗?
我正在阅读一个文件,将行号和数据存储在哈希表中,并在Excel中打印。目前我正在实现哈希变量。我的要求是匹配行中的模式,如果找到匹配项,则存储一个字符串。

cat file1
line1 abc line1a .
line2 ddf line2a
line3 dde line3a
....
....
%value={ 1:
        line1 abc line1a => "somestring"
      2: 
        line2 ddf line2a => ""
      ...}

我现在使用以下代码

use strict;
use warnings;
use feature "say";
use Data Dumper;

my $No=1;
my %value;

open(INPUT,"file1");

while (<INPUT>) {
    $value{$No}{$_}="";
    $No=$No+1;
}
close <INPUT>

你能在这里提出一些建议吗?而且我的文件里有150多行。
例外

------------------------------------- -----------------------
         |         Question                   |         Answer       |
         ------------------------------------- -----------------------
         | How many Teams are present         |    10                |
         ------------------------------------- ----------------------
         | Total no of participate joined     |     234              |
         ------------------------------------- -----------------------
         | No of player`s name Start with L   |                      |
         ------------------------------------- -----------------------
         | Total No of MoM won by Team        |     Team F           |
         ------------------------------------- -----------------------

我正在使用EXCEL::Writer::XLSX模块创建XLS格式。还没有实现,因为我在收集数据时卡住了

amrnrhlw

amrnrhlw1#

我正在努力更好地理解这个问题。
您想要创建一个哈希,其中

  • 关键字是行号和数据
  • 如果模式匹配,则值为“somestring”,否则为“”。

我会试着基于这种理解来回答。让我知道它是否有帮助。
假设-输入为常规文件。
哈希包含一个键和一个与之相关的值。例如:%值=(“A”=〉abc,“B”=〉def,“C”=〉ghi);
获取以下内容:

  • %值={ 1:第2行:第2行ddf第2a行=〉“”...}*

您可以尝试以下操作:

use strict;
use warnings;
use Data:Dumper;

my $pattern = "abc"; //desired pattern
my $line_no = 1;
my %data;

//Opening the file in read mode
open(INPUT, "<", "file1") or die "Cannot open file :$!\n";

//Parsing the File till the end of file
while(<INPUT>){
   chomp($_);
   my key  = join(":", $line_no, $_); //Use any delimiter to join these. I have used ":" here. You can use " " to add space as delimiter.
   //Check for the pattern and store "something" as the value for the matching hash line
   if($_ =~ /$pattern/){
      $data{$key} = "something";
   } else {
      $data{$key} = "";
   }
   $line_no++;
}
close INPUT;
print Dumper (\%data);

输出量:
$VAR1 = {
“1:abc行1a”=“某事物”,
“2:ddf行2a”=“",
等等
}

相关问题