[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Script para acessar uma matriz
From: |
andelnyr |
Subject: |
Re: Script para acessar uma matriz |
Date: |
Fri, 08 Jan 2010 18:26:07 -0000 |
User-agent: |
eGroups-EW/0.82 |
Júlio
Vou experimentar o bash 4.0 e também a interessante a idéia de simular vetores
multidimensionais.
O meu objetivo é o de concentrar informações sobre os processos que estão sendo
desenvolvidos pelo sistema e que estão distribuídos em diversos diretórios
diferentes, em um único arquivo na forma de um banco de dados textual. A
matriz é maior do que o exemplo que forneci são 33 linhas por 24 colunas e
agora estou me preparando para testar o desempenho do formato antigo com o novo
formato que estou desenvolvendo.
Agradeço as dicas e a rápida resposta.
Abraços
Angelo Andelnyr
--- Em address@hidden, "Julio C. Neves" <julio.neves@...> escreveu
>
> Fala Andelnyr,
> Não tive tempo de me meter na lógica do seu prg, mas deixa eu te dar algumas
> dicas sobre vetores:
>
> Estou escrevendo um artigo sobre o Bash 4.0 do qual tirei um pedaço e
> transcrevo a seguir:
> Lendo um arquivo para um vetor
>
> Ainda falando do Bash 4.0, eis que ele surge com uma outra novidade: o
> comando intrínseco (*builtin*) mapfile, cuja finalidade é jogar um arquivo
> de texto inteiro para dentro de um vetor, sem *loop* ou substituição de
> comando
>
> -
>
> EPA! Isso deve ser muito rápido!
> -
>
> E é. Faça os teste e comprove!
>
> Exemplo:
>
> *$ cat frutas *
>
> abacate
>
> maçã
>
> morango
>
> pera
>
> tangerina
>
> uva
>
> *$ mapfile vet < frutas **Mandando frutas para vetor vet*
>
> *$ echo ${vet[@]} **Listando todos elementos de vet*
>
> abacate maçã morango pera tangerina uva
>
>
> Obteríamos resultado idêntico se fizéssemos:
>
> *$ vet=($(cat frutas))*
>
>
> Porém isso seria mais lento porque a substituição de comando é executada em
> um *subshell*.
>
> Uma outra forma de fazer isso que logo vem à cabeça é ler o arquivo com a
> opção -a do comando read. Vamos ver como seria o comportamento disso:
>
> *$ read -a vet < frutas *
>
> $ echo ${vet[@]}
>
> abacate
>
>
> Como deu para perceber, foi lido somente o primeiro registro de frutas.
>
> Pois é, se vc está usando o Bash 4.0, poderia usar este intrínseco para
> carregar o vetor. É bem mais rápido de programar e de executar.
>
> Outra dica é que vc pode emular um array de mais de uma dimensão. No seu
> caso, cada linha tem 4 campos. Supondo que a linha está em $L e o campo está
> em $C, vc poderia indexar da seguinte forma:
> L=3;C=2
> Vet [$L$C]=110
>
> Para recuperar, vc pode usar echo ${!Vet[@]}, que te devolverá todos e
> somente os índices do vetor. Se o índice estiver em $Ind,
> L=$[Ind/10]
> C=$[Ind%10]
>
> Espero que esta teoria o ajude, pq se usá-la, creio que seu prg ficará menor
> e mais rápido.
>
> Abraços,
> Julio
> Cursos de Shell e Zenity em 2 fins de semana?
> - Em SP ligue (11)2125-4747;
> - Em DF ligue (61) 3223-3000;
> - Turmas fechadas em outras cidades ligue (21) 8112-9988.