quarta-feira, 19 de novembro de 2008

Busca arquivo diretorio Linux

Colaboração: Ricardo Jurczyk Pinheiro

Data de Publicação: 19 de November de 2008

Uma necessidade que tenho vez por outra, no Linux, é descobrir em que
arquivo de configuração, dentro do /etc, devo mexer. Como o /etc tem vários
diretórios, e dentro deles outros arquivos, acabei desenvolvendo uma solução
"rápida e suja", que funciona muito bem:


#!/bin/sh
#
# Pesquisa - Encontra um padrao dentro de uma lista de arquivos
# numa arvore de diretorios
# Autor: Ricardo Jurczyk Pinheiro - ricardojpinheiro@ibest.com.br
# Versao 0.
000000000000000000000000000000000000000000000000000001
#
#
if [ $# -ne 2 ]; then
echo "$0 (palavra a ser procurada) (arvore de diretorios)"
exit 1
else
for nome in $(find $2 -type f | sort | uniq); do
echo $nome
cat $nome | grep $1
done
fi

E basta fazer um pipe com o less, que resolve o problema de excesso de informações na tela.

Ricardo Jurczyk Pinheiro - Linux user #82838 - http://estudiodaintrospeccao.blogspot.com

terça-feira, 18 de novembro de 2008

Função em Postgres

O meu problema é transformar um campo que retorna a informação da forma:

"250077#;#251420#;#251000#;#250915#;#250840#;#251720#;#251320#;#251398#;#"

em um lista da forma:

"500625,500085,250760,250933,250050,250530,250210,250560,251430,251570,251100,250077,251420,251000,250915,250840,251720,251320,251398,251207,250205,251203,251365,251445,250720,250990,250940,250790,250980,250090,251270,251280,250937,250740,250230,250290,250280,250130,251580,251275,250250,250215,250435,250950,250120,250040,251510,352780,351670,350150,350140,311787,250270,251600,251590,250190,250270,251600,251590,250190,250960,250220,251450,250070,251330,251680,250960,250220,251450,250070,251330,251680,251560,250820,251593,250580,251272,251160,250520,250080,251150,250640,251500,"

Para resolver isso criei uma função em PostgreSQL para executar esta tarefa:

CREATE or REPLACE FUNCTION lista_mun() RETURNS varchar AS '

DECLARE
mviews RECORD;
lista varchar;
BEGIN
lista := \'\';
FOR mviews IN select replace(resposta,\'#;#\',\',\') as mun
from dados.itemquest
where pergunta=\'p_mun_ref\' LOOP

lista := lista || mviews.mun;

END LOOP;

RETURN lista;
END;
' LANGUAGE plpgsql;


Forma de utilização:
select lista_mun()

A função acima tem um problema, como comparar o texto contendo número inteiros com um número inteiro.

Assim reescrevi a função para que retornasse um vetor de inteiros:

CREATE OR REPLACE FUNCTION dados.lista_mun()
RETURNS integer[] AS
$BODY$
DECLARE
mviews RECORD;
lista varchar;
return_arr text[];
BEGIN
lista = '';
FOR mviews IN select replace(resposta,'#;#',',' ) as mun
from dados.itemquest
where pergunta='p_mun_ref' LOOP

lista := lista || mviews.mun;

END LOOP;

return_arr := '{' || lista || 0 || '}';

RETURN return_arr;
END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE;

Para utilizar esta função, é necessário transformar o vetor de inteiros para número inteiros individuais:

select *
from
generate_series(1,array_upper(dados.lista_mun(),1)) as idx(i),
dados.lista_mun() as arr(a)

Onde a função
array_upper(dados.lista_mun(),1) = Retorna o tamanho do array
generate_series(1,array_upper(dados.lista_mun(),1)) = Retorna número de 1 ao tamanho do array

O uso final da função ficou assim:

select c.gid, MakePoint(c.longitudes,c.latidudese ) as the_geom
from mapas.shp_munic c
where c.ibge in
(select arr.a[idx.i]
from
generate_series(1,array_upper(dados.lista_mun(),1)) as idx(i),
dados.lista_mun() as arr(a))

segunda-feira, 10 de novembro de 2008

Alguns configure para POSTGRES/POSTGIS/MAPSERVER/PHP

Para o POSTGIS
./configure \
--with-pgsql=/opt/PostgreSQL/8.3/bin/pg_config \
--with-geos \
--with-proj \


Para o PHP
./configure \
--with-apxs2=/usr/local/apache2/bin/apxs \
--with-pgsql=/opt/PostgreSQL/8.3/bin \
--enable-soap \
--enable-zip \
--with-gd \
--with-jpeg-dir=/usr/local

Para o MapServer
./configure \
--with-wfs \
--with-wfsclient \
--with-wmsclient \
--with-gdal=/usr/local/bin/gdal-config \
--with-php=/usr/local/include/php \
--with-mygis=yes \
--with-postgis=/opt/PostgreSQL/8.3/bin/pg_config \
--with-proj