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

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[shell-script-pt] Fazendo um "de / para" com um cabeçalho CSV


From: George Robinson
Subject: [shell-script-pt] Fazendo um "de / para" com um cabeçalho CSV
Date: Wed, 28 Jul 2021 20:24:14 -0300

Prezados, boa noite!

Montei um pequeno script em shell que faz a leitura de um cabeçalho CSV e os insere em um banco de dados com a seguinte estrutura:

Cabeçalho CSV:

fname,mname,lname,address,address2,CITY,ST,ZIP,SEQ_NUM
William,Dias,Maranhão,Rua Khalifa,Casa  03,Paraty,RJ,24444-444,1

neste caso, o que eu faço no meu script é pegar cada campo e assumir que a sequencia do arquivo sempre será essa. Então quando eu faço um import no banco seria algo assim:

mongoimport -h localhost:27017 -u $mobilendPrdUser -p $mobilendPasswd\
                  --db $mobilendPrdDb \
                  --collection $collection \
                  --type csv \
                  --columnsHaveTypes \
                  --fields 'First name'.string\(\),'Middle name'.string\(\),'Last name'.string\(\),'Address'.string\(\),'Address2'.string\(\),'City'.string\(\),'state'.string\(\),'zip'.string\(\),'seq_num'.int64\(\)

Porém, notei, que em alguns casos, o cabeçalho que recebo para dar carga no banco pode mudar, podendo ter mais campos à esquerda ou a direita. Sendo assim, o cabeçalho
fname,mname,lname,address,address2,CITY,ST,ZIP,SEQ_NUM pode passar a ser
email,id,fname,mname,lname,address,address2,CITY,ST,ZIP,SEQ_NUM,phone,etc ou até mesmo mudança na nomenclatura do cabeçalho (fname, passando a ser first name)

eu gostaria de ter algo como um array contendo todas as possibilidades como por exemplo (fiz em python)

dataTypes = {}
dataTypes["fname"]          = "string"
dataTypes
["firstname"] = "string"
dataTypes["first name"] = "string"
dataTypes["mname"]          = "string"
dataTypes
["middlename"] = "string"
dataTypes["middle name"] = "string"
dataTypes["lname"]          = "string"
dataTypes
["lastname"] = "string"
dataTypes
["last name"] = "string"
dataTypes["address"]        = "string"
dataTypes["address2"]       = "string"
dataTypes["city"]           = "string"
dataTypes["st"]             = "string"
dataTypes["state"]          = "string"
dataTypes["zip"]            = "string"
dataTypes["seq_number"]     = "int64"
dataTypes
["phone"] = "string"
dataTypes["phonenumber"] = "string"
dataTypes["phone number"] = "string"


A ideia seria ter um "índice" de possíveis campos de cabeçalho e "mapeá-los" de acordo com o que recebo no arquivo, já definindo o dataType dele.

Hoje meu script segue uma sequência presumida, que se quebrada, insere os campos fora de posição na tabela, o que me força a atualzar o script para bater com a sequencia recebida.

Se alguém puder me ajudar, acho que só falta essa parte pra ele ficar bem automatizado.

--
George Robinson
Analista de Suporte
Tel: +55 (21) 97449-8138

reply via email to

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