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

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









reply via email to

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