É possível contar a quantidade de caracteres de um campo usando REGEX? [RESOLVIDO]

1. É possível contar a quantidade de caracteres de um campo usando REGEX? [RESOLVIDO]

Mestre Kame
mlgrassi

(usa Debian)

Enviado em 07/08/2022 - 14:55h

Prezados,

Supondo na existência de um arquivo de cadastro de clientes em formato CSV, cujo qual cada campo precisa ser validado para verificar se está no padrão conforme definido.
É possível construir um validador utilizando regex baseado no exemplo a seguir? (a ferramenta por enquanto não importa se será grep, awk, sed, etc)

Exemplo: O 1º campo do arquivo contém o nome do cliente. A quantidade de caracteres do campo deve ser 100 caracteres. Se o nome do cliente não ocupar todos os 100 caracteres, deverá ser preenchido o equivalente com zeros à esquerda.
No caso ficaria assim:

0000000000000000000000000000000000000000000000000000000000000000000000000000000000Joãozinho da Silva 


A REGEX que eu preciso (caso isso seja possível de fazer) deve validar se:
-a soma entre a quantidade de zeros com a quantidade de caracteres correspondentes ao nome do cliente seja = 100
-se os caracteres do primeiro da esquerda para a direita seja zero e se somente contém zeros até o início no nome do cliente
-que o trecho que corresponde ao nome do cliente somente aceite letras minúsculas, maiúsculas, espaços e acentuação

Eu tentei fazer assim, porém está incompleto pois o {100} não diz respeito a quantidade individual de caracteres e sim a quantidade que a sequencia de caracteres agrupada poderia aparecer. Algo que está totalmente errado:
^(0+[a-zA-Zà-úÀ-ÚçÇ ]+){100} 


Alguma ajudinha aí?



  


2. Re: É possível contar a quantidade de caracteres de um campo usando REGEX? [RESOLVIDO]

leandro peçanha scardua
leandropscardua

(usa Ubuntu)

Enviado em 07/08/2022 - 16:11h

O objetivo é validar ou converter? Todos os campos têm tamanho fixo de 100?



3. Re: É possível contar a quantidade de caracteres de um campo usando REGEX? [RESOLVIDO]

Mestre Kame
mlgrassi

(usa Debian)

Enviado em 07/08/2022 - 21:52h


Apenas validar


4. Re: É possível contar a quantidade de caracteres de um campo usando REGEX?

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 07/08/2022 - 22:52h

mlgrassi escreveu:

Prezados,

Supondo na existência de um arquivo de cadastro de clientes em formato CSV, cujo qual cada campo precisa ser validado para verificar se está no padrão conforme definido.
É possível construir um validador utilizando regex baseado no exemplo a seguir? (a ferramenta por enquanto não importa se será grep, awk, sed, etc)

Exemplo: O 1º campo do arquivo contém o nome do cliente. A quantidade de caracteres do campo deve ser 100 caracteres. Se o nome do cliente não ocupar todos os 100 caracteres, deverá ser preenchido o equivalente com zeros à esquerda.
No caso ficaria assim:

0000000000000000000000000000000000000000000000000000000000000000000000000000000000Joãozinho da Silva 


A REGEX que eu preciso (caso isso seja possível de fazer) deve validar se:
-a soma entre a quantidade de zeros com a quantidade de caracteres correspondentes ao nome do cliente seja = 100
-se os caracteres do primeiro da esquerda para a direita seja zero e se somente contém zeros até o início no nome do cliente
-que o trecho que corresponde ao nome do cliente somente aceite letras minúsculas, maiúsculas, espaços e acentuação

Eu tentei fazer assim, porém está incompleto pois o {100} não diz respeito a quantidade individual de caracteres e sim a quantidade que a sequencia de caracteres agrupada poderia aparecer. Algo que está totalmente errado:
^(0+[a-zA-Zà-úÀ-ÚçÇ ]+){100} 


Alguma ajudinha aí?

Boa noite mlgrassi.
Segue sugestão:
nome='João José Gonçalves da Silva'
[[ "$nome" =~ ^([A-Za-z ]+)$ ]] && echo "$(printf "%$((100-${#nome}))s"|tr ' ' '0')${nome}" || echo "Nome fora do padrão"
000000000000000000000000000000000000000000000000000000000000000000000000João José Gonçalves da Silva

----------------------------------------------------------------------------------------------------------------


______________________________________________________________________
Importante:
lynx --dump https://www.vivaolinux.com.br/termos-de-uso/ | sed -nr '/^[ ]+Se/,/dou.$/p'
______________________________________________________________________
Nota de esclarecimento:
O comando: ACIMA, faz parte da minha assinatura.
Att.: Marcelo Oliver
______________________________________________________________________



5. Re: É possível contar a quantidade de caracteres de um campo usando REGEX? [RESOLVIDO]

Mestre Kame
mlgrassi

(usa Debian)

Enviado em 08/08/2022 - 08:42h

A sua sugestão é excelente! No entanto não irá me ajudar, pois eu receberei um arquivo para validar, o qual já estará preenchido. Como os nomes serão diversos, eu não tenho como extrair somente o nome e armazenar em uma variável, pois dado este fato o nome já vai estar localizado após N posições depois dos zeros. E este N muda toda a vez conforme linhas diferentes.Entendes? Por isso pensei em uma regex.



6. Re: É possível contar a quantidade de caracteres de um campo usando REGEX?

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 08/08/2022 - 16:18h

mlgrassi escreveu:

A sua sugestão é excelente!
No entanto não irá me ajudar, pois eu receberei um arquivo para validar, o qual já estará preenchido.
Como os nomes serão diversos, eu não tenho como extrair somente o nome e armazenar em uma variável, pois dado este fato o nome já vai estar localizado após N posições depois dos zeros.
E este N muda toda a vez conforme linhas diferentes.
Entendes? Por isso pensei em uma regex.

Boa tarde mlgrassi.
Na postagem anterior, foi um exemplo de como colocar ZEROS para preencher com 100 caracteres.....
-----------------------------------------------------------------------------------------------------------------------------------
Tem como extrair somente o "nome" e os "zeros", do campo em referência.

Arquivo de testes:
cat arq.csv
000000000000000000000000000000000000000000000000000000000000000000000000000000João José Gonçalves Um;cpo_0102;cpo_0103
0000000000000000000000000000000000000000000000000000000000000000000000000000João José Gonçalves Dois;cpo_0202;cpo_0203
0000000000000000000000000000000000000000000000000000000000000000000000000000João José Gonçalves Três;cpo_0302;cpo_0303
00000000000000000000000000000000000000000000000000000000000000000000000000João José Gonçalves Quatro;cpo_0402;cpo_0403
000000000000000000000000000000000000000000000000000000000000000000000000000João José Gonçalves Cinco;cpo_0502;cpo_0503

----------------------------------------------------------------------------------------------------------------

#!/usr/bin/env bash
count=0;

printf "Opção 01\n";

while read line;do
count=$((count+1));
IFS=";" read -a c <<< "$line" ## gera uma array/matriz com os campos da linha, c[0], c[1] e c[2], o nome com os zeros, é o c[0]
zeros="${c[0]%%[A-za-z ]*}"; ##pega só os ZEROS, exclui nome.
nome="${c[0]//0/}"; ## pega só o nome, exclui zeros.
echo -n " Linha: ${count} =>"
[[ "$nome" =~ ^([A-Za-z ]+)$ ]] && echo -n " Nome Okay: " || echo -n " Nome:${nome} NOT_Okay: " ## Valida o nome
## Checa se o "tamanho da var == 100", Qtdd de 0 + qtdd de caracteres do "nome"
ttcar=$((${#zeros} + ${#nome})); ## Total de caracteres
(($ttcar == 100)) && echo " Tam:${ttcar}" || echo " Tam:${ttcar} ERRO, $((100-${ttcar})) ZERO(s)"
done<arq.csv

--------------------------------------------------------------------------------------------------------------------------------------------------------------
Opção com awk
coloquei +5 ZEROS na linha 3, para acusar erro

awk -F";" '{sz=length($1);nz=(gsub("0","",$1));printf "%s;%s;%s;%s;%s\n",sz,nz,length($1),$1,nz+length($1)==100?"OKAY":"ERRO";}' arq.csv
100;78;22;João José Gonçalves Um;OKAY
100;76;24;João José Gonçalves Dois;OKAY
105;81;24;João José Gonçalves Três;ERRO
100;74;26;João José Gonçalves Quatro;OKAY
100;75;25;João José Gonçalves Cinco;OKAY

______________________________________________________________________
Importante:
lynx --dump https://www.vivaolinux.com.br/termos-de-uso/ | sed -nr '/^[ ]+Se/,/dou.$/p'
______________________________________________________________________
Nota de esclarecimento:
O comando: ACIMA, faz parte da minha assinatura.
Att.: Marcelo Oliver
______________________________________________________________________



7. Re: É possível contar a quantidade de caracteres de um campo usando REGEX?

Perfil removido
removido

(usa Nenhuma)

Enviado em 08/08/2022 - 21:32h

Faltou você mandar um exemplo bom para gente poder pensar...

Segue sugestão do glob extendido do bash/ksh e regex para checagem (validação é diferente):

[[ $line = *(0)+([!0-9])* ]] 

[[ $line =~ ^0*[^0-9]+ ]] 


Adicionar zeros até o primeiro campo do CSV ficar com 100 caráters:
chars="${line%;*}"
for ((chars=${#chars}; chars<100; ++chars))
do line="0$line"
done
echo "$line"




8. Re: É possível contar a quantidade de caracteres de um campo usando REGEX? [RESOLVIDO]

Mestre Kame
mlgrassi

(usa Debian)

Enviado em 09/08/2022 - 10:00h

Show de bola minha gente! Me ajudaram bastante, muito obrigado.







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts