我正在努力学习这部分练习... 我需要从文件中读取字符串并将它们放入不同的变量中... 团队,请审核,请在您的空闲时刻回复......
输入文件:(test_ts.txt)
Test1--12:45
Test2--1:30
脚本:
use strict;
use warnings;
my $filename = "test_ts.txt";
my @name = ();
my @hrs=();
my @mins=();
open(my $fh, $filename)
or die "Could not open file '$filename' $!";
while (my $row = <$fh>) {
chomp $row;
push(@name, $row);
print "$row\n";
}
输出:
Test1--12:45
Test2--1:30
预期产出:
Test1
Test2
*(Array should have the below values
name[0]=Test1
name[1]=Test2
hrs[0]=12
hrs[1]=1
mins[0]=45
mins[1]=30)*
尝试使用Split:
while (my $row = <$fh>) {
chomp $row;
$row=split('--',$row);
print $row;
$row=split(':',$row);
print $row;
push(@name, $row);
print "$row\n";
}
尝试拆分后得到的输出:
211
211
答案 0 :(得分:2)
split
返回一个列表;当你在$row = split(..., $row);
之类的标量上下文中使用它时,那么:
$row
。你需要更像的东西:
while (my $row = <$fh>)
{
chomp $row;
my @bits = split /[-:]+/, $row;
print "@bits\n";
push(@name, $bits[0]);
…other pushes…
print "$row\n";
}
您迟早需要了解标量和数组上下文。同时,将split
的结果分配给数组。
答案 1 :(得分:0)
以下是基于“ - ”分割行的简单方法,然后基于“:”分割时间。希望这能帮助你。
use strict;
use warnings;
my $filename = "test_ts.pl";
my @name = ();
my @hrs=();
my @mins=();
open(my $fh, $filename)
or die "Could not open file '$filename' $!";
while (my $row = <$fh>) {
chomp $row;
my ($a,$b) = split("--", $row);
my ($c, $d) = split (":", $b);
push(@name, $a);
push(@hrs, $c);
push(@mins, $d);
}
print "$name[0]\n";
print "$name[1]\n";
print "$hrs[0]\n";
print "$hrs[1]\n";
print "$mins[0]\n";
print "$mins[1]\n";
答案 2 :(得分:0)
使用全局正则表达式有时比split
更简单。这个简短的程序通过查找目标字符串中的所有字母数字字段来工作。
use strict;
use warnings;
use autodie;
open my $fh, '<', 'test_ts.txt';
my (@name, @hrs, @mins);
while (<$fh>) {
my ($name, $hrs, $mins) = /\w+/g;
push @name, $name;
push @hrs, $hrs;
push @mins, $mins;
print "$name\n";
}
print "\n";
print "Names: @name\n";
print "Hours: @hrs\n";
print "Minutes: @mins\n";
<强>输出强>
Test1
Test2
Names: Test1 Test2
Hours: 12 1
Minutes: 45 30