Arquivo

Archive for fevereiro \21\UTC 2009

Split: Dividindo uma String

21 fevereiro, 2009 2 comentários

Uma tarefa muito comum quando utilizamos o Perl para manipular textos é o de separar e dividir uma String – seja ela uma palavra ou uma frase. O split é uma função nativa do Perl que realiza com extrema eficiência esta tarefa. Dado uma String e uma condição, ele realiza uma varredura na String a procura de algo que corresponda o que for definido na regex da condição. Conforme vão sendo encontrados resultados, o split vai retornando os mesmos. Veja sua sintaxe:

($retorno1,$retorno2) = split (/[condição]/,$frase,$limite);

  • As variáveis $retorno1 e $retorno2 receberão os dois dados que forem separados, cada um para a respectiva variável.
  • A condição pode ser expressa em forma de String ou expressão regular (regex) (Veja a tabela de regex).
  • O limite é um parâmetro opcional que só precisa ser definido se for necessário limitar o número de retornos.

No split podemos especificar quantas variáveis de retorno quisermos. Se o número de dados retornados for indefinido, podemos definiro retorno para uma array, da seguinte forma:

(@retornos) = split (/[condição]/,$frase,$limite);

Vejamos alguns exemplos práticos sobre como funciona o split:

$frase = “Campinas – SP”;
($cidade,$estado) = split(” – “,$frase); # Divide a frase por ” – ”

print “Eu moro em $cidade que fica no estado de $estado”;

O exemplo acima produzirá o seguinte resultado:

Eu moro em Campinas que fica no estado de SP


Podemos também usar regex para expressar as condições.
Digamos que temos uma String e queremos separá-la pelos números contidos nela.
Podemos usar a regex d+ que identifica os numeros contidos na String. Veja um exemplo:

$frase = “ABC1DEF2GHI”;
($div1,$div2,$div3) = split(/d+/,$frase,3);

print $div1.”n”;   print $div2.”n”;   print $div3.”n”;

O código acima mostrará o seguinte na tela:

ABC DEF GHI


Como último exemplo, podemos fazer uma separação de vários ítens de uma String.
Vamos pegar uma frase longa que não sabemos o número de retornos.

$frase = “O-rato-roeu-a-roupa-do-Rei-de-Roma”;
(@novaFrase) = split(/-/,$frase); # O retorno é feito na array @novaFrase

print $novaFrase[0].”n”;
print $novaFrase[1].”n”;
print $novaFrase[2].”n”;
(…)
print $novaFrase[8].”n”;

Isto irá separar a frase por e produzirá o seguinte resultado na tela:

O rato roeu a roupa do Rei de Roma

Note que não informamos ao split o número de variáveis que seriam retornadas e nem mesmo o limite, pois  tudo que ele for encontrando ele já vai incluindo na array especificada.
Para obtermos o valor, basta acessar o array informando suas respectivas posições para encontrar os ítens retornados.

Enfim, o split é certamente uma das funções mais importantes do Perl, e um fator que faz de nossa linguagem ser a melhor quando o assunto é manipulação de texto.

Até a próxima!