-1

私は入力を持っています、それはこのようになります

入力ファイル

ID                   Score1  Score2
ABC                     1      2
DEF                     30     50

各行でIDと2つのスコアを取得したいのですが、成功しましたが、単語を取得できる関数はありますか? つまり、この関数を 3 回呼び出すと、ID と 2 つのスコアを取得できます ....

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);

働ける .....

ありがとう

4

2 に答える 2

1

正確に何を出力する必要があるのか​​ わかりません(正確なサンプル入力と正確なサンプル出力を提供することをお勧めしますが、魔女の文字列IDと2つの数値スコアで始まる行のみが必要な場合は、次のようなものを使用できます:

while ( $line = <STDIN> ) {
  my ($id, $score1, $score2) = ( $line =~ /^([A-Z]+)\s+([0-9]+)\s+([0-9]+)$/ );
  print $id;
}
于 2013-03-09T12:17:04.700 に答える
0

次のこともできます。

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

/+/は正規表現です。1つ以上の空白スペースを処理します

于 2013-03-09T12:04:02.857 に答える