1

こんにちは専門家と親切なヘルパー、

私は Perl を初めて使用するので、ここでいくつかのヘルプを使用できます。1000 行を超える CSV ファイルを扱っていますが、ここの例で問題を複製して単純化しました。

基本的に、天気に基づいて、または行の2番目の列が繰り返されないように、いくつかの行を削除したいと思います。これは紛らわしいかもしれませんが、例を挙げて説明させてください。

入力データ:

M,100,John,10
M,98,Mike,9
F,99,Amelia,9
F,100,Rosana,10
F,100,Susan,11
M,99,James,8

期待される出力:

M,100,John,10
F,100,Rosana,10
F,100,Susan,11
F,99,Amelia,9
M,99,James,8

上記の例では、Mike だけが自分のスコア (2 列目の 98) を残りの生徒と共有していないため、彼の名前は印刷されません。つまり、特定のエントリの 2 列目の値が一意であり、他のエントリで繰り返されていない場合は、除外する必要があります。並べ替えはオプションです。

これは私がこれまでに持っているものです。

use Text::CSV;
use strict;

my $csv = Text::CSV->new();
my $sheet;

while( <DATA> ) {
  chomp;
  my $row;
  @$row = split( /,/, $_ );
  push @$sheet, $row;
}

@$sheet = sort { $b->[1] <=> $a->[1] } @$sheet;

 foreach my $row ( @$sheet ) {
    print join( ',', @$row), "\n";
}

__DATA__
M,100,John,10
M,98,Mike,9
F,99,Amelia,9
F,100,Rosana,10
F,100,Susan,11
M,99,James,8

どこから始めればよいかさえわかりません。ヘルプ/提案は大歓迎です。

4

1 に答える 1