você está aqui: Home  → Arquivo de Mensagens Programação Shell Linux: Inscrições Abertas

Justificador de texto com Perl

Colaboração: Gustavo Chaves

Data de Publicação: 04 de Agosto de 2000

Aproveitando a deixa da mensagem sobre o justificador de texto com sed, enviada pelo Aurelio, o Gustavo me enviou um script similar que realiza a tarefa com perl:

#!/usr/bin/perl -w
# justify - justify text lines.
# $Id: justify,v 1.2 2000/07/21 20:01:33 gustavo Exp $

$columns = 65;

while (<>) {
    s/\s+$/\n/;			      # trim trailing spaces
    next unless $columns > length;    # skip big lines
    @words   = split /(?<=\S)\s+/;    # split it preserving leading spaces
    $inter   = @words - 1;	      # number of interword spaces
    next unless $inter > 0;	      # skip single worded and blank lines
    $length  = 0;
    $length += length foreach @words; # sum up the size of the words
    $spaces  = $columns - $length;    # how many spaces for the line
    $blanks  = int($spaces / $inter); # how many spaces for each interword
    $extra   = $spaces % $inter;      # extra spaces due to rounding
    next if ($blanks + !!$extra) > 5; # skip if we have to add too much space
    # Go on, rebuild the line.
    $_       = '';
    for ($i=0; $i<$inter; ++$i) {
	$_ .= $words[$i] . ' ' x ($blanks + ($i<$extra));
    }
    $_ .= $words[$i] . "\n";
} continue {
    print;
}


Veja a relação completa dos artigos de Gustavo Chaves