desafio [RESOLVIDO]

1. desafio [RESOLVIDO]

Alexandre Gonçalves Monteiro da Silva
alexandregms

(usa Ubuntu)

Enviado em 23/09/2011 - 19:27h

Pessoal, estou trabalhando num script que deve-se extrair elementos de um arquivo xml e inseri-lo numa variavel, preferencialmente num array, mas ainda estou em dúvida se uso array ou nao.
Bom, o arquivo é este:

<?xml version='1.0' encoding='ISO-8859-1' ?>
<!DOCTYPE DEFCAL SYSTEM "defcal.dtd">
<DEFCAL >
<CALENDAR DATACENTER="database-des" NAME="ATIVOS" TYPE="Regular">
<YEAR DAYS="YYNNYYYYYNNYYYYYNNYYYYYNNYYYYYNNYYYYYNNYYYYYNNYYYYYNNYYYYYNNYYYYYNNYYYYYNNYYYYYNNYYYYYNNYYYYYNNYYYYYNNYYYYYNNYYYYYNNYYYYYNNYYYYYNNYYYYYNNYYYYYNNYYYYYNNYYYYYNNYYYNYNNYYYYYNNYYYYYNNYYYYYNNYYYYYNNYYYYYNNYYYYYNNYYYYYNNYYYYYNNYYYYYNNYYYYYNNYYYYYNNYYYYYNNNYYYYNNYYYYYNNYYYYYNNYYYYYNNYYYYYNNNYYYYNNYYYYYNNYYYYYNNNYYYYNNYYYYYNNYYYYYNNYYYYYNNYYYYYNNYYYYYNNYYYYYNNYYYNNNNYYYN" DESCRIPTION="Seg a Sex - Feriado: setar o dia" NAME="2009"/>
<YEAR DAYS="NNNYYYYYNNYYYYYNNYYYYYNNNYYYYNNYYYYYNNYYYYYNNNNYYYNNYYYYYNNYYYYYNNYYYYYNNYYYYYNNYYYYYNNYYYYNNNYYYYYNNYYYYYNNYYNYYNNYYYYYNNYYYYYNNYYYYYNNYYYYYNNYYYYYNNYYYNYNNYYYYYNNYYYYYNNYYYYYNNYYYYYNNYYYYNNNYYYYYNNYYYYYNNYYYYYNNYYYYYNNYYYYYNNYYYYYNNYYYYYNNYYYYYNNYNYYYNNYYYYYNNYYYYYNNYYYYYNNYYYYYNNYNYYYNNYYYYYNNYYYYYNNYNYYYNNYYYYYNNNYYYYNNYYYYYNNYYYYYNNYYYYYNNYYYYYNNYYYYYNNYYYYN" DESCRIPTION="Seg a Sex - Feriado: setar o dia" NAME="2010"/>
<YEAR DAYS="NNYYYYYNNYYYYYNNYYYYYNNYNYYYNNYYYYYNNYYYYYNNYYYYYNNYYYYYNNYYYYYNNNNYYYNNYYYYYNNYYYYYNNYYYYYNNYYYYYNNYYYYYNNYYYNNNNYYYYYNNYYYYYNNYYYYYNNYYYYYNNYYYYYNNYYYYYNNYYYYYNNYYYYYNNYYYNYNNYYYYYNNYYYYYNNYYYYYNNYYYYYNNYYYYYNNYYYYYNNYYYYYNNYYYYYNNYYYYYNNYYYYYNNYYNYYNNYYYYYNNYYYYYNNYYYYYNNYYYYYNNYYNYYNNYYYYYNNYYYYYNNYYNYYNNYYYYYNNYNYYYNNYYYYYNNYYYYYNNYYYYYNNYYYYYNNYYYYYNNYYYYNN" DESCRIPTION="Seg a Sex - Feriado: setar o dia" NAME="2011"/>
</CALENDAR>
</DEFCAL>


A questão aqui é a seguinte, concentrem-se, pois a lógica é meio complicada:

A TAG "YEAR DAYS" são os dias do ano (Y para dia útil e N para feriados e finais de semana) e a TAG NAME representa o ano.

Estou bolando um script para que o usuario digite o número 280 do ano de 2010, após isso ele deve procurar o quarto dia útil (ou seja o quarto Y).

Entenderam a idéia?

As ideias que tive foram:
1) armazenar os N/Y em vetores;
2) gerar um arquivo externo, gerando um dia abaixo do outro (por exemplo, assim posso verificar se o dia 280 é util ou nao - de acordo com o numero da linha;

Ainda nem comecei o script, pois to atuando em outros scripts de rsync, mas ja aguardo novas idéias..nao precisam postar o codigo, isso eu faço aqui..só queria as idéias mesmo!

Valeu povo!


  


2. Re: desafio [RESOLVIDO]

Alexandre Gonçalves Monteiro da Silva
alexandregms

(usa Ubuntu)

Enviado em 23/09/2011 - 19:29h

segue o arquivo:



<?xml version='1.0' encoding='ISO-8859-1' ?>
<!DOCTYPE DEFCAL SYSTEM "defcal.dtd">
<DEFCAL >
<CALENDAR DATACENTER="database-des" NAME="ATIVOS" TYPE="Regular">
<YEAR DAYS="YYNNYYYYYNNYYYYYNNYYYYYNNYYYYYNNYYYYYNNYYYYYNNYYYYYNNYYYYYNNYYYYYNNYYYYYNNYYYYYNNYYYYYNNYYYYYNNYYYYYNNYYYYYNNYYYYYNNYYYYYNNYYYYYNNYYYYYNNYYYYYNNYYYYYNNYYYYYNNYYYNYNNYYYYYNNYYYYYNNYYYYYNNYYYYYNNYYYYYNNYYYYYNNYYYYYNNYYYYYNNYYYYYNNYYYYYNNYYYYYNNYYYYYNNNYYYYNNYYYYYNNYYYYYNNYYYYYNNYYYYYNNNYYYYNNYYYYYNNYYYYYNNNYYYYNNYYYYYNNYYYYYNNYYYYYNNYYYYYNNYYYYYNNYYYYYNNYYYNNNNYYYN" DESCRIPTION="Seg a Sex - Feriado: setar o dia" NAME="2009"/>
<YEAR DAYS="NNNYYYYYNNYYYYYNNYYYYYNNNYYYYNNYYYYYNNYYYYYNNNNYYYNNYYYYYNNYYYYYNNYYYYYNNYYYYYNNYYYYYNNYYYYNNNYYYYYNNYYYYYNNYYNYYNNYYYYYNNYYYYYNNYYYYYNNYYYYYNNYYYYYNNYYYNYNNYYYYYNNYYYYYNNYYYYYNNYYYYYNNYYYYNNNYYYYYNNYYYYYNNYYYYYNNYYYYYNNYYYYYNNYYYYYNNYYYYYNNYYYYYNNYNYYYNNYYYYYNNYYYYYNNYYYYYNNYYYYYNNYNYYYNNYYYYYNNYYYYYNNYNYYYNNYYYYYNNNYYYYNNYYYYYNNYYYYYNNYYYYYNNYYYYYNNYYYYYNNYYYYN" DESCRIPTION="Seg a Sex - Feriado: setar o dia" NAME="2010"/>
<YEAR DAYS="NNYYYYYNNYYYYYNNYYYYYNNYNYYYNNYYYYYNNYYYYYNNYYYYYNNYYYYYNNYYYYYNNNNYYYNNYYYYYNNYYYYYNNYYYYYNNYYYYYNNYYYYYNNYYYNNNNYYYYYNNYYYYYNNYYYYYNNYYYYYNNYYYYYNNYYYYYNNYYYYYNNYYYYYNNYYYNYNNYYYYYNNYYYYYNNYYYYYNNYYYYYNNYYYYYNNYYYYYNNYYYYYNNYYYYYNNYYYYYNNYYYYYNNYYNYYNNYYYYYNNYYYYYNNYYYYYNNYYYYYNNYYNYYNNYYYYYNNYYYYYNNYYNYYNNYYYYYNNYNYYYNNYYYYYNNYYYYYNNYYYYYNNYYYYYNNYYYYYNNYYYYNN" DESCRIPTION="Seg a Sex - Feriado: setar o dia" NAME="2011"/>
</CALENDAR>
</DEFCAL>




3. Re: desafio [RESOLVIDO]

DAVISON MARCEL PASQUALINI
fdmarp

(usa Debian)

Enviado em 26/09/2011 - 12:50h

uma forma ... fiz meio corrido e por isso só testei no Debian

echo "Digite o dia"
read dia
echo "Digite o ano"
read ano
if [ `sed 's/</\n/'g arquivo_de_datas | grep $ano | cut -d"\"" -f2 | cut -c $dia` == "Y" ]; then
echo UTIL
elif [ `sed 's/</\n/'g arquivo_de_datas | grep $ano | cut -d"\"" -f2 | cut -c $dia` == "N" ]; then
echo "NAO UTIL"
else
echo ERRO
fi



4. concluído!

Alexandre Gonçalves Monteiro da Silva
alexandregms

(usa Ubuntu)

Enviado em 10/10/2011 - 20:50h

Pessoal, só consegui voltar a este script agora..
Boa @fdmarp, comecei a fazer com vetores, mas a ideia do sed pareceu bem interessante tb.
A ideia é o seguinte: verificar o quarto dia util do ano, ou seja eu digito o dia 240 do ano de 2010, ele deve me retornar quantos dias no total (Y ou N) ele teve q se movimentar.
Outra coisa a fazer foi realizar o mesmo procedimento para uma 'virada' de ano, por exemplo: se eu digitar o dia 362 do ano de 2010, ele deve me retornar o dia 4 de 2011, ou seja, 7 dias após o dia informado:


2010:
Y Y Y N
362-363-364-365

2011:
N N Y Y
1 - 2 - 3 - 4


Segue o codigo final:



#!/bin/bash

CONT=1
CONT_UTIL=0
FILE="year_day.xml"

echo "Digite o dia: "
read dia
echo "Digite o ano: "
read ano

if [ -z $dia ] || [ -z $ano ]; then

echo "DIA e ANO devem ser digitados"
exit 1

fi

ANO_SEGUINTE()
{

ano=$1
dia=1

grep $ano $FILE &> /dev/null
if [ $? -ne 0 ]; then

echo "Nao existe o ano $ano no arquivo $FILE"
exit 1

fi

while [ $CONT_UTIL -ne 4 ]
do

FILT=`cat $FILE | sed 's/</\n/'g | grep $ano | cut -d"\"" -f2 | cut -c $dia`

if [ `echo $FILT` == Y ]; then

# dia util, indo para o proximo dia
dia=`expr $dia + 1`
CONT_UTIL=`expr $CONT_UTIL + 1`
let CONT++

elif [ `echo $FILT` == N ]; then

dia=`expr $dia + 1`
let CONT++

fi

done

let CONT--
echo "Foi para o ano seguinte: $ano."
echo "Sao $CONT dias apos o dia informado"
exit 0
}

FIRST()
{

let dia++
while [ $CONT_UTIL -ne 4 ]
do

FILT=`cat $FILE | sed 's/</\n/'g | grep $ano | cut -d"\"" -f2 | cut -c $dia`

if [ `echo $FILT ` == Y ] 2> /dev/null; then

# dia util, indo para o proximo dia
dia=`expr $dia + 1`
CONT_UTIL=`expr $CONT_UTIL + 1`
let CONT++

elif [ `echo $FILT ` == N ] 2> /dev/null; then

dia=`expr $dia + 1`
let CONT++

else

ano=`expr $ano + 1`
ANO_SEGUINTE "$ano"


fi

done

let CONT--
echo "O quarto dia util eh `echo $FILT`"
echo "Sao $CONT dias apos o dia informado"
exit 0
}
FIRST










Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts