Concatenar váriavel com números [RESOLVIDO]

1. Concatenar váriavel com números [RESOLVIDO]

yasmine malafaia de miranda
yasminemm

(usa Ubuntu)

Enviado em 16/04/2017 - 09:22h

Oi pessoal,

Estou aprendendo Unix, e gostaria de saber como faço isso corretamente abaixo:

Se entrar com dois numeros completar com 00 e a variavel
e assim por diante.
FN(){
if (${#fn}=1) then
fn="000${fn}"
else
if (${#fn}=2) then
fn="00${fn}"
else
if (${#fn}=3) then
fn="0${fn}"
fi
fi
fi
}
echo "INSERT INTO CT_OPCOES_PWX VALUES(DF0122F${fn}');

obrigada!


  


2. Re: Concatenar váriavel com números [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 16/04/2017 - 10:22h

Caso esteja usando BASH. Veja o seguinte código:

ax1=0123456789
nx1=4
echo ${ax1:$nx1:3}


Preste atenção em ${ax1:$nx1:3}

ax1 é uma variável de string.
$nx1 representa a posição de onde começará a ser pega uma substring dentro de ax1.
3 representa o tamanho da substring a ser pega, isto é, quantos caracteres serão pegos.

Com isto você pode fazer um cálculo pegando o tamanho da sua string numérica ${#fn} como você estava fazendo.
Depois crie uma string tipo aquela $ax1 só de zeros como ax1=00000000000000000000.
Faça as contas subtraindo o valor de ${#fn} de ${#ax1}
Mande imprimir a string de zeros com o tamanho do valor calculado que sairá a quantidade certa de zeros.

Ou

Crie uma segunda string com uma quantidade imensa de zeros justapostos com sua string de trabalho.

fn="000000000000000"$fn

Você só precisará saber de qual posição terá de começar a exibir a substring retirada de $fn.
Para isto terá de medir $fn antes da justaposição com os zeros.
Fazendo a subtração e colocando no esquema ${STRING:POSIÇÂO:TAMANHO} ficará mais simples que usar IFs ou CASE.

Válido ao menos para BASH.

----------------------------------------------------------------------------------------------------------------
Nem direita, nem esquerda. Quando se trata de corrupção o Brasil é ambidestro.
(anônimo)

Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden



3. Re: Concatenar váriavel com números

yasmine malafaia de miranda
yasminemm

(usa Ubuntu)

Enviado em 16/04/2017 - 10:32h

echo "FN:"
read fn

FN(){
ax1=0000
nx1=1
nx2=2
nx3=3
if (${#fn}=1) then
fn=${ax1:$nx1:1}$fn
else
if (${#fn}=2) then
fn=fn=${ax1:$nx2:2}$fn
else
if (${#fn}=3) then
fn=fn=${ax1:$nx3:3}$fn
fi
fi
fi
}


echo "INSERT INTO CT_OPCOES_PWX VALUES($id,'DF','SAC_DF0122F${fn}','PWX_NRDB_R2_CEN',SYSDATE,SYSDATE,'$table');"


Seria algo desse tipo? Estou chamando corretamente no insert?


4. Re: Concatenar váriavel com números [RESOLVIDO]

yasmine malafaia de miranda
yasminemm

(usa Ubuntu)

Enviado em 16/04/2017 - 10:47h

yasminemm escreveu:

echo "FN:"
read fn

FN(){
ax1=0000
nx1=1
nx2=2
nx3=3
if (${#fn}=1) then
fn=${ax1:$nx1:1}$fn
else
if (${#fn}=2) then
fn=fn=${ax1:$nx2:2}$fn
else
if (${#fn}=3) then
fn=fn=${ax1:$nx3:3}$fn
fi
fi
fi
}


echo "INSERT INTO CT_OPCOES_PWX VALUES($id,'DF','SAC_DF0122F${fn}','PWX_NRDB_R2_CEN',SYSDATE,SYSDATE,'$table');"



Seria algo desse tipo? Estou chamando corretamente no insert?





5. Re: Concatenar váriavel com números

Perfil removido
removido

(usa Nenhuma)

Enviado em 16/04/2017 - 10:56h

Quase. Você não precisa usar IFs.

Basta calcular com subtração de tamanhos das strings.
Isto substitui o if ... =1, if ... =2 etc.

Pense: você tem um tamanho de string final para apresentar.
Você pega o tamanho da string inicial, que era a que você ia usar nos IFs e compara com a strng dos zeros.

Tipo

String inicial fn=123456
String de zeros zeros=000000
Quero que seja apresentada a string com tamanho 9.
Portanto 000123456 ------> nove caracteres

9-3=6

Fica algo como

${zeros:0:3}

Pegando três caracteres a partir da posição zero (inicial).

echo ${zeros:0:3}$fn 


Você só precisa escrever a parte que calcula a quantidade de zeros a ser apresentada.

----------------------------------------------------------------------------------------------------------------
Nem direita, nem esquerda. Quando se trata de corrupção o Brasil é ambidestro.
(anônimo)

Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden



6. Re: Concatenar váriavel com números [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 16/04/2017 - 11:00h

Gostaria de dizer ainda que existe mais de uma solução.

Pode ser usado um comando chamado printf ou ainda outro truque de BASH com ${} novamente.

----------------------------------------------------------------------------------------------------------------
Nem direita, nem esquerda. Quando se trata de corrupção o Brasil é ambidestro.
(anônimo)

Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden



7. Re: Concatenar váriavel com números

yasmine malafaia de miranda
yasminemm

(usa Ubuntu)

Enviado em 16/04/2017 - 11:17h

Eu tentei dessa forma:

echo "FN:"
read fn
zeros=0000

echo "INSERT INTO CT_OPCOES_PWX VALUES($id,'DF','SAC_DF0122F${zeros:0:4:}$fn');

Mas fiquei pensando eu quero sempre que tenha 4 numeros totais.
Se a pessoa entrar com dois numeros, completa com 2 zeros

Nao sei se é a melhor forma, entendo a subtração mas..nao sei
dessa forma que fiz ainda esta errado
ele me retorna

yasmine.sh: line 10: "INSERT INTO CT_OPCOES_PWX VALUES($id,'DF','SAC_DF0122F${zeros:0:4:}$fn','PWX_NRDB_R2_CEN',SYSDATE,SYSDATE,'$table');": bad substitution

desculpa a ignorancia mas é meu primeiro script :D


8. Re: Concatenar váriavel com números

Perfil removido
removido

(usa Nenhuma)

Enviado em 16/04/2017 - 11:25h

Sem problemas :D

Se o valor extrapolar os quatro dígitos, então na subtração pode ser feito um IF de modo que seja evitado dar algum valor absurdo.
Para dar 0 ou 4 conforme a proposição.

Outra coisa: cometi um erro que foi editado há uns minutos e peço desculpas.

Não seria

${zeros:0:4:}

e sim

${zeros:0:4}

Aqueles dois pontos finais não existem. Apenas dois "dois pontos" para separar aqueles três elementos dentro dos colchetes (ops, chaves).



----------------------------------------------------------------------------------------------------------------
Nem direita, nem esquerda. Quando se trata de corrupção o Brasil é ambidestro.
(anônimo)

Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden



9. Re: Concatenar váriavel com números [RESOLVIDO]

yasmine malafaia de miranda
yasminemm

(usa Ubuntu)

Enviado em 16/04/2017 - 11:29h

Isso mesmo!

echo "FN:"
read fn
zeros=0000000

echo "INSERT INTO CT_OPCOES_PWX VALUES($id,'DF','SAC_DF0122F${zeros:0:4}$fn','PWX_NRDB_R2_CEN',SYSDATE,SYSDATE,'$table');"


Dessa forma funciona, mas ele sempre vai por 4 zeros e o valor que eu inserir.
Só que no meu caso eu preciso que seja contato o valor de entrada anteriormente , antes de colocar os zeros, para nao extrapolar 4 posições


10. Re: Concatenar váriavel com números [RESOLVIDO]

yasmine malafaia de miranda
yasminemm

(usa Ubuntu)

Enviado em 16/04/2017 - 11:38h

A realidade é que não sei chamar a função ali:

echo "FN:"
read fn
FN(){
zeros=0000
if(${#fn}=1) then
fn= ${zeros:0:3}$fn
else
if(${#fn}=2) then
fn= ${zeros:0:2}$fn then
else
if(${#fn}=3) then
fn=${zeros:0:1}$fn
fi
fi
fi
}

echo "INSERT INTO CT_OPCOES_PWX VALUES($id,'DF','SAC_DF0122F${fn}','PWX_NRDB_R2_CEN',SYSDATE,SYSDATE,'$table');"



11. Re: Concatenar váriavel com números [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 16/04/2017 - 11:46h

Pode assustar um pouco mas fiz umas correções no script original.

Lá embaixo aparece uma chamada da função FN usando 123 como argumento.
Esse argumento é representado na função por $1. Dentro da função ele vai para a variável $fn.
Daí começa o IF.

Se o tamanho for igual a 1, ele completa com três zeros e joga tudo para dentro de $fn.
Agora o truque: ELIF significa ELSE IF.

Ao invés de você escrever uma porção de "else if" você usa "elif".
Fica mais simples.
Se a condição do IF não dá certo, ele vai para o primeiro ELIF, para o segundo etc.
Até chegar no ELSE se houver.

Mas para que usar ECHO?

É um procedimento normal em scripts.
Ele é usado para a função gerar um valor de retorno.
Dependendo de como a função foi chamada o ECHO escreve a saída $fn em lugares diferentes.
A opção -n é para o ECHO não imprimir caractere de mudança de linha.

A função é chamada como fn=`FN 123`
Veja que o caractere ` é diferente do caractere '.

Essa escrita quer dizer executar a função FN com o argumento 123 e jogar a saída dentro da variável $fn.
Sem o par de `...` daria erro no sinal de =.
Sem mandar para a variável $fn, o ECHO da função FN apenas escreveria na tela.

#!/bin/bash

FN(){

fn="$1"

if [ ${#fn} -eq 1 ]
then
fn="000${fn}"

elif [ ${#fn} -eq 2 ]
then
fn="00${fn}"

elif [ ${#fn} -eq 3 ]
then
fn="0${fn}"

fi

echo -n "$fn"

}

fn=`FN 123`


----------------------------------------------------------------------------------------------------------------
Nem direita, nem esquerda. Quando se trata de corrupção o Brasil é ambidestro.
(anônimo)

Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden



12. Re: Concatenar váriavel com números [RESOLVIDO]

yasmine malafaia de miranda
yasminemm

(usa Ubuntu)

Enviado em 16/04/2017 - 11:55h

Muito obrigada!!

Para eu inserir a função no meu insert basta chamar {fn}?
'SAC_DF0122F{fn}'



01 02



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts