如何从文件中获取每行的数据?

sbk*_*sbk 2 arrays perl

在这里,我想将每行中的数据打印为3个单独的值,并使用" :"作为分隔符.该文件BatmanFile.txt包含以下详细信息:

Bruce:Batman:bat@bat.com
Santosh:Bhaskar:santosh@santosh.com
Run Code Online (Sandbox Code Playgroud)

我预期的输出是:

Bruce
Batman
bat@bat.com
Santosh
Bhaskar
santosh@santosh.com
Run Code Online (Sandbox Code Playgroud)

执行脚本后的输出是:

Bruce
Batman
bat@bat.com
Bruce
Batman
bat@bat.com
Run Code Online (Sandbox Code Playgroud)

请解释一下我在这里缺少的东西:

use strict;
use warnings;

my $file = 'BatmanFile.txt';
open my $info, $file or die "Could not open $file: $!";
my @resultarray;
while( my $line = <$info>)  {   
    #print $line;    
    chomp $line;
    my @linearray = split(":", $line);
    push(@resultarray, @linearray);
    print join("\n",$resultarray[0]),"\n";
    print join("\n",$resultarray[1]),"\n";
    print join("\n",$resultarray[2]),"\n";
}
close $info;
Run Code Online (Sandbox Code Playgroud)

Cha*_*hak 5

您逐行循环遍历文件.您已将所有行(分割后)存储在数组中.循环结束后,您将所有数据都放在resultarray数组中,只需在循环后打印整个数组(而不是仅打印您当前正在执行的前3个索引).

#!/usr/bin/perl
use strict;
use warnings;
my @resultarray;
while( my $line = <DATA>){
    chomp $line;
    my @linearray = split(":", $line);
    push @resultarray, @linearray;
}
print "$_\n" foreach @resultarray;
__DATA__
Bruce:Batman:bat@bat.com
Santosh:Bhaskar:santosh@santosh.com
Run Code Online (Sandbox Code Playgroud)

演示


您可以避免所有变量并执行以下操作

while(<DATA>){
    chomp;
    print "$_\n" foreach split(":");
}
Run Code Online (Sandbox Code Playgroud)

一个班轮:

perl -e 'while(<>){chomp; push @result, split(":",$_);} print "$_\n" foreach @result' testdata.txt
Run Code Online (Sandbox Code Playgroud)