| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| use warnings; |
| use strict; |
|
|
| my $errs = 0; |
| sub err { |
| my $nr = shift; |
| my $msg = shift; |
| print STDERR "$nr:$msg\n"; |
| $errs++; |
| } |
|
|
| my $onr = 0; |
| my @lines = (); |
| sub flush { |
| return if 0 == scalar @lines; |
| print join(" ", @lines); |
| print "\n"; |
| $onr++; |
| @lines = (); |
| } |
|
|
| my $nr = 0; |
| my $numscores = undef; |
| while (<>) { |
| chomp; |
| if ($_ eq "") { |
| flush(); |
| next; |
| } |
| my ($a, $b, $label, $scores, $rest) = split /\s+/, $_, 5; |
| err($nr, "The delimiter '|||' can't appear in the input!") if /\|\|\|/; |
| err($nr, "Node id not numeric: $a") if $a !~ /^\d+$/; |
| err($nr, "Node id not numeric: $b") if $b !~ /^\d+$/; |
| err($nr, "Unexpected tail: '$rest'") if defined $rest && $rest !~ /^\s*$/; |
| my $thisnumscores = ($scores =~ tr/,/,/); |
| $numscores = $thisnumscores if !defined $numscores; |
| err($nr, "Incompatible number of arc scores, previous lines had ".($numscores+1).", now ".($thisnumscores+1)) |
| if $numscores != $thisnumscores; |
| push @lines, join("|||", ($a,$b,$label,$scores)); |
| } |
| flush(); |
|
|
| exit 1 if $errs; |
|
|