如何在Perl中搜索特定列?

Shi*_*iel 0 csv perl search

我有一个包含一些数据的文本文件.我试图ID列中搜索EA 并打印整行.但代码识别所有EA并打印所有行.我应该添加什么代码来满足条件?再次感谢:-)!

数据:
姓名年龄ID
---------------------
KRISTE,22,EA 2008
J EA N,21,ES4567
JAK,45,EA 2008

代码打印:
KRISTE ,22,EA 2008
J EA N,21,ES4567
JAK,45,EA 2008

期望的输出:
KRIS,22,EA 2008
Kane,45,EA 2008,

file='save.txt';
open(F,$file)||die("Could not open $file");
while ($line=<F>){
if ($line=~ m/$EA/i) {
my @cells=($f1,$f2,$f3)= split ',',$line;
print "<TD>f1</TD>";
print "<TD>f2</TD>";
print "<TD>f3</TD>";
}
Run Code Online (Sandbox Code Playgroud)

Jon*_*ler 8

brian和Jeremy的代码组合修复了所有问题:

use strict;
use warnings;

my $file = 'save.txt';
open my $fh, "<", $file or die "Could not open $file: $!";

while ($line = <$fh>)
{
    my($f1, $f2, $f3) = split ',', $line;
    if ($f3 =~ m/EA/i)
    {
        print "<TD>$f1</TD>";
        print "<TD>$f2</TD>";
        print "<TD>$f3</TD>";
    }
}
Run Code Online (Sandbox Code Playgroud)

Brian已经将匹配模式概括为use CGI;my $EA = param('keyword');但是我解除了,因为我没有看到它适用于这个问题.


bri*_*foy 6

您应该发布用于说明问题的实际示例程序.这是你的清洁程序:

use strict;
use warnings;

use CGI;

my $EA = param('keyword');

my $file = 'save.txt';
open my $fh, "<", $file or die "Could not open $file: $!";

while( $line=<$fh> ) {
   if( $line=~ m/$EA/i ) {
       my( $f1, $f2, $f3 ) = split ',', $line;
       print "<TD>$f1</TD>";
       print "<TD>$f2</TD>";
       print "<TD>$f3</TD>";
       }
   }
Run Code Online (Sandbox Code Playgroud)

这里有一些可以帮到你的东西.

  • 你的变量需要他们的印记.没有他们,他们什么都不做.
  • 当您尝试打开文件并想要报告错误时,请包含$!变量,所以你看到错误是什么.
  • 您可以直接拆分为标量变量.这只是一个列表分配.您不需要额外的@cell变量.
  • 使用一些空格为你的陈述提供一些呼吸空间.毕竟,它是免费的.