如何从输入文件中读取令牌?

时间:2013-03-09 12:00:44

标签: perl

我有输入,看起来像这样

输入文件

ID                   Score1  Score2
ABC                     1      2
DEF                     30     50

我想在每一行得到ID和两个分数,然后我成功了,但是我想问一下是否存在任何函数可以得到一个字?这意味着我将此功能调用三次然后我就可以获得ID和两个分数......

while( eof(Input) !=1)
{
    $C = getc(Input);
    if($C eq "\n")
    {
        $Signal = 0;
        print Output @Elements;
        print Output "\n";
        @Elements = ();
    }
    elsif($C ne " ")
    {
        if($Signal == 1)
        {
            push(@Elements,"-");
            $Signal = 0;
        }
        push(@Elements,$C);
    }
    else
    {
        $Signal = 1;
    }
}

我找到了

$Line = readline(*Input);
@Line_elements = split(" ",$Line);

可以工作.....

感谢

2 个答案:

答案 0 :(得分:1)

我不确定究竟应该输出什么(更好的是提供精确的样本输入和精确的样本输出,但如果你只想要开始字符串id然后两个数字分数的行,你可以使用这样的东西:

while ( $line = <STDIN> ) {
  my ($id, $score1, $score2) = ( $line =~ /^([A-Z]+)\s+([0-9]+)\s+([0-9]+)$/ );
  print $id;
}

答案 1 :(得分:0)

你也可以这样做:

my ($id, $score1, $score2) = split / +/, $Line;

/ + /是正则表达式;它需要关注一个或多个空格