Informática Numaboa - Tutoriais e Programação
Linguagem Perl - Strings
Sex 21 Nov 2008 18:04 |
- Detalhes
- Categoria: Perl e CGI
- Atualização: Sexta, 21 Novembro 2008 22:21
- Autor: vovó Vicki
- Acessos: 12051
Transformando strings em listas
Quanto se tem strings que tenham caracteres específicos para separar partes, pode-se tratar estes caracteres como delimitadores e transferir as partes para uma lista. Veja um exemplo:
No exemplo, a escalar $CVS_Linha contém uma linha típica de um arquivo de dados delimitados por vírgulas. Muitos programas de banco de dados e planilhas oferecem a possibilidade de gravar arquivos neste formato. Tais arquivos são gravados geralmente com a extensão .cvs. Quando se faz a leitura linha por linha de um arquivo deste tipo, obtém-se, para cada linha, um conteúdo parecido com o da variável escalar $CVS_Linha.
Utilizando a função split (split = rachar, separar), pode-se separar o conteúdo em campos e armazená-los numa lista. Define-se uma lista, como a lista @Endereco, à qual se atribui os valores de retorno da função split. A função split possui dois argumentos, opcionalmente três. Como primeiro parâmetro envia-se uma expressão regular, através da qual o delimitador de campos é enviado. No exemplo acima, é apenas a vírgula. A string é enviada como segundo parâmetro, a partir do qual será gerada a lista. No exemplo acima, é a escalar $CVS_Linha. Como terceiro parâmetro pode-se enviar, opcionalmente, o número máximo de campos que devem ser gerados. No exemplo dado, o terceiro parâmetro não seria necessário - consta apenas para apresentar integralmente a função.
Concatenando elementos de lista em strings
O procedimento inverso ao anterior também pode ser feito. É possível criar uma string a partir dos elementos de uma lista:
Aqui atribuimos um endereço à lista @Partes, com campos para cada dado. Esta lista pode ser transformada numa string com a ajuda da função join e com o caractere (ou caracteres) delimitador que servirá como elemento de separação. A função join, portanto, faz o oposto da função split.
Define-se uma escalar, como a $CVS_Linha, à qual é atribuído o valor de retorno da função join. Esta função possui dois argumentos. O primeiro aguarda como parâmetro o caractere (ou caracteres) delimitador que servirá como elemento de separação. Novamente, apenas uma vírgula. O segundo aguarda como parâmetro uma lista que fornecerá os elementos que comporão a string. No exemplo, a lista é @Partes.
Inserindo, substituindo e eliminando elementos de listas
As listas não precisam ter um conteúdo homogêneo nem um comprimento fixo. Elas podem, durante a execução de um script, terem o número de elementos aumentados ou diminuídos.
Exemplo 1 - Inserir um elemento:
Exemplo 2 - Eliminar um elemento:
Exemplo 3 - Substituir um elemento:
Exemplo 4 - Reordenar elementos:
Com a ajuda da função push pode-se adicionar um novo elemento a uma lista. No exemplo 1, a lista @Endereco recebe um novo elemento que contém um endereço de e-mail. A função push recebe como primeiro parâmetro a lista à qual serão adicionados um ou mais elementos. Como segundo parâmetro, o(s) elemento(s) que serão inseridos na lista. Estes podem ser strings ou números. Quando mais de um elemento é adicionado eles devem ser separados por vírgulas.
A contrabarra que se vê no endereço de e-mail não pertence a este endereço. É apenas uma máscara (ou um escape) para a arroba @, uma vez que este caractere tem significado próprio na Perl (identifica as listas).
Com a ajuda da função pop pode-se eliminar o último elemento de uma lista. Para isto, envia-se como parâmetro a lista da qual se quer eliminar o último elemento. No exemplo 2, a lista é @Endereco e o elemento eliminado corresponde ao CEP e cidade.
Para substituir determinado elemento de uma lista, basta referenciá-lo e atribuir-lhe o novo valor. Veja o exemplo 3.
O exemplo 4 mostra como reordenar "manualmente" os elementos de uma lista. Para isto, a função shift é a mais indicada. Esta função elimina o primeiro elemento de uma lista e a devolve como valor de retorno. Com isto, todos os elementos da lista sobem uma posição, de modo que o segundo torna-se primeiro, etc. Para não perder o elemento tirado da lista, é aconselhável atribuí-lo temporariamente a uma escalar. No exemplo 4 este elemento foi atribuído à escalar $Temp e, através da função push, foi inserido no final da lista - tudo ocorrendo dentro de um loop do tipo for para tratar de todos os elementos existentes. O resultado do exemplo 4 coloca CEP e cidade no início da lista, seguido do nome e da rua.
Ordenando elementos de listas
Uma característica poderosa da Perl é a capacidade de ordenação.
Exemplo 1 - Ordenando strings numa lista:
Exemplo 2 - Ordenando Números:
Para a ordenação automática de listas existe a função sort. Esta função ordena alfabeticamente, em ordem ascendente, os elementos de uma lista que é indicada como parâmetro. Para obter este resultado basta o comando @Ordem = sort(@Netos) como no exemplo 1 - a lista @Netos é ordenada alfabeticamente e atribuída à lista @Ordem.
A coisa é um pouco mais complicada quando se quer ordenar valores numéricos, como no exemplo 2. Para isto é necessária uma subrotina com determinadas características, uma vez que a função sort a chama quando necessário. A subrotina OrdenaNumeros pode ser usada para este propósito. Através da diretiva @ListaOrdenada = sort OrdenaNumeros @Recordes;, a lista @Recordes é ordenada numericamente. Nesta formulação, é melhor não usar parênteses.
Se for necessária uma ordenação de valores numéricos em ordem decrescente, pode-se usar a função reverse. No exemplo 2, após obter a lista @ListaOrdenada, ordenada em ordem crescente, a mesma é invertida em @Decrescente através da diretiva @Decrescente = reverse @ListaOrdenada;.