[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Filtro para TXT - Campos com Comprimento Fixo
From: |
Adriano da Silva Múfalo |
Subject: |
Filtro para TXT - Campos com Comprimento Fixo |
Date: |
Mon, 15 Sep 2003 08:27:12 -0300 |
[adriano:~/script]$ cat cabec
Campo Posicao Comprimento
Tipo 1 1
Serie 2 1
Data 3 8
Codigo 11 4
[adriano:~/script]$ cat dados
E1199912100013
S1200001030015
[adriano:~/script]$ ./listadados
Registro 1
Tipo=E
Serie=1
Data=19991210
Codigo=0013
Registro 2
Tipo=S
Serie=1
Data=20000103
Codigo=0015
Reg Tipo Serie Data Codigo
1 E 1 19991210 0013
2 S 1 20000103 0015
[adriano:~/script]$ cat listadados
# Funcoes
function pegadados()
{
count=0
IFS='
'
for i in $(cat cabec | tail +2 | tr -s " ")
do
((count=count+1))
NOME[$count]=$(echo $i | cut -d" " -f1)
INICIO[$count]=$(echo $i | cut -d" " -f2)
TAMANHO[$count]=$(echo $i | cut -d" " -f3)
done
MAX=$count
numlinha=0
for linha in $(cat dados)
do
((numlinha=numlinha+1))
count=1
while [ $count -le $MAX ]
do
ate=$(expr ${INICIO[$count]} + ${TAMANHO[$count]} - 1)
eval "${NOME[$count]}[\$numlinha]=\$(echo \$linha |
cut -c\${INICIO[$count]}-$ate)"
((count=count+1))
done
done
MAXLINHA=$numlinha
}
function listaemlinhas() {
numlinha=1
while [ $numlinha -le $MAXLINHA ]
do
count=1
echo "Registro $numlinha"
while [ $count -le $MAX ]
do
echo -ne "${NOME[$count]}="
eval echo $(echo "\${${NOME[$count]}[\$numlinha]}")
((count=count+1))
done
echo
((numlinha=numlinha+1))
done
}
function listaemcolunas()
{
count=1
echo -ne "Reg\t"
while [ $count -le $MAX ]
do
echo -ne "${NOME[$count]}\t"
((count=count+1))
done
echo
numlinha=1
while [ $numlinha -le $MAXLINHA ]
do
count=1
echo -ne "$numlinha\t"
while [ $count -le $MAX ]
do
eval echo -ne $(echo "\${${NOME[$count]}[\$numlinha]}")
echo -ne "\t"
((count=count+1))
done
echo
((numlinha=numlinha+1))
done
}
# Inicio Script
pegadados;
listaemlinhas;
echo
listaemcolunas;
----- Original Message -----
From: "César A. K. Grossmann" <address@hidden>
To: <address@hidden>
Sent: Wednesday, September 10, 2003 10:41 AM
Subject: [shell-script] Re: Filtro para TXT - Campos com Comprimento Fixo
<snip>
Talvez eu não tenha explicado direito o problema. Suponha que eu tenho
o seguinte banco de dados (vou tentar colocar duas linhas, cada linha
é um registro, ok?):
E1199912100013
S1200001030015
Colocando esta informação na forma de uma tabelinha, eu teria o seguinte:
Campo Posicao Comprimento
Tipo 1 1
Serie 2 1
Data 3 8
Codigo 11 4
Ou seja, o leiaute deveria ser:
Campo Posicao Comprimento
Tipo 1 1
Serie 2 2
Codigo 4 3
Data 7 8
O meu problema é escrever um programa que leia o arquivo original,
faça o desdobramento do mesmo nos campos *fornecidos*, e escreva o
arquivo no formato *desejado*. Um filtro, portanto...