shell-script-pt
[Top][All Lists]
Advanced

[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.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]