#!usr/bin/perl use strict; use warnings; use RTF::Writer; use Data::Dumper; use RTF::Tokenizer; die "usage: $0 input output\n" unless @ARGV == 2; my $infile = shift; my $outfile = shift; my $tokenizer = RTF::Tokenizer->new(); $tokenizer->read_file($infile); my ( $token_type, $argument, $parameter ); { # reduce bogus warnings no warnings 'uninitialized'; # get past the header ( $token_type, $argument, $parameter ) = $tokenizer->get_token() until ($token_type eq 'control' and $argument eq 'par'); } my @final; while ($token_type ne 'eof'){ ( $token_type, $argument, $parameter ) = $tokenizer->get_token(); push @final, $argument if $token_type eq 'text'; } my $rtf = RTF::Writer->new_to_file($outfile); my @sorted = sort { my @fields_a = split / / , $a; my @fields_b = split / /, $b; chomp($a, $b); $fields_a[0] cmp $fields_b[0]; } @final; $rtf->prolog; $rtf->print(\@sorted); $rtf->close;