Enviado em 07/07/2023 - 10:55h
Pessoal bom dia, tudo bem?
Fiz uma extração de dados via estrutura WSDL e como retorno recebo uma string em XML, porém estou com alguns problemas pra transformar essa string no padrão de carga que preciso, que seria um arquivo .TXT separado por pipeline (|).
A string vem nesse formato:
<NomeCandidato>Nome ficticio 1</NomeCandidato><CPF>12345678900</CPF><IDInscricao>8523690</IDInscricao><DataExame>2009-10-02T00:00:00</DataExame><NomeExame>Ouvidores</NomeExame><DataProcessamento>2009-10-05T15:50:15.447</DataProcessamento><SituacaoFinal>R</SituacaoFinal><GrauObtido>63.00</GrauObtido><StatusLiberacao>Resultado Fornecido/Liberado</StatusLiberacao><IDModulo>0</IDModulo><NumeroAcertos>25</NumeroAcertos><TempoRestante>2000-01-01T01:15:46</TempoRestante><CooperativaCentral>0000 - Instituição A</CooperativaCentral>
<NomeCandidato>Nome ficticio 2</NomeCandidato><CPF>14785236900</CPF><IDInscricao>9874561</IDInscricao><DataExame>2023-05-12T00:00:00</DataExame><NomeExame>CPC-S100</NomeExame><DataProcessamento>2023-05-14T21:52:16.367</DataProcessamento><SituacaoFinal>A</SituacaoFinal><GrauObtido>77.00</GrauObtido><StatusLiberacao>Resultado Fornecido/Liberado</StatusLiberacao><IDModulo>0</IDModulo><NumeroAcertos>46</NumeroAcertos><TempoRestante>2000-01-01T01:03:12</TempoRestante><CooperativaCentral>9999 - Instituição B</CooperativaCentral><CooperativaSingular>9999.1 - PA - Singular 1</CooperativaSingular>
E as transformações que preciso aplicar são:
1. As informações que estão dentro das tags <...> e </...> precisam ser removidas pq elas apenas indicam o início e fim da coluna;
2. As colunas que não tiverem informação precisam ser marcadas normalmente com o separador escolhido o pipeline (|)
Exemplo:
- Na primeira linha da string acima, que coloquei como exemplo não possui informação para a coluna CooperativaSingular, o ideal era que o XML nesse caso destacasse a coluna dessa forma: <CooperativaSingular></CooperativaSingular>, porém na primeira linha simplesmente a tag não aparece, logo pra quê simplificar se eles podem dificultar? Com isso, mesmo não havendo nenhuma informação, na transformação final eu preciso saber que este campo é reservado e isso se aplica para todas as outras colunas que podem ser vazias ou não;
3. As colunas com características de date ou datetime devem estar no formato YYYY-MM-DD;
4. Por fim, deve-se incluir o cabeçalho abaixo: NomeCandidato|CPF|IDInscricao|DataExame|NomeExame|DataProcessamento|SituacaoFinal|GrauObtido|StatusLiberacao|IDModulo|NumeroAcertos|TempoRestante|CooperativaCentral|CooperativaSingular
A ideia é que com as transformações acima feitas as linhas fiquem assim:
NomeCandidato|CPF|IDInscricao|DataExame|NomeExame|DataProcessamento|SituacaoFinal|GrauObtido|StatusLiberacao|IDModulo|NumeroAcertos|TempoRestante|CooperativaCentral|CooperativaSingular
Nome ficticio 1|12345678900|8523690|2009-10-02|Ouvidores|2009-10-05|R|63.00|Resultado Fornecido/Liberado|0|25|2000-01-01|0000 - Instituição A|
Nome ficticio 2|14785236900|9874561|2023-05-12|CPC-S100|2023-05-14|A|77.00|Resultado Fornecido/Liberado|0|46|2000-01-01|9999 - Instituição B|9999.1 - PA - Singular 1
O arquivo tem 50.000 linhas e o que fiz até agora foi essa parte de código:
No mais é isso, se puderem me ajudar agradeço demais!!!!!
Abraço.
Fiz uma extração de dados via estrutura WSDL e como retorno recebo uma string em XML, porém estou com alguns problemas pra transformar essa string no padrão de carga que preciso, que seria um arquivo .TXT separado por pipeline (|).
A string vem nesse formato:
<NomeCandidato>Nome ficticio 1</NomeCandidato><CPF>12345678900</CPF><IDInscricao>8523690</IDInscricao><DataExame>2009-10-02T00:00:00</DataExame><NomeExame>Ouvidores</NomeExame><DataProcessamento>2009-10-05T15:50:15.447</DataProcessamento><SituacaoFinal>R</SituacaoFinal><GrauObtido>63.00</GrauObtido><StatusLiberacao>Resultado Fornecido/Liberado</StatusLiberacao><IDModulo>0</IDModulo><NumeroAcertos>25</NumeroAcertos><TempoRestante>2000-01-01T01:15:46</TempoRestante><CooperativaCentral>0000 - Instituição A</CooperativaCentral>
<NomeCandidato>Nome ficticio 2</NomeCandidato><CPF>14785236900</CPF><IDInscricao>9874561</IDInscricao><DataExame>2023-05-12T00:00:00</DataExame><NomeExame>CPC-S100</NomeExame><DataProcessamento>2023-05-14T21:52:16.367</DataProcessamento><SituacaoFinal>A</SituacaoFinal><GrauObtido>77.00</GrauObtido><StatusLiberacao>Resultado Fornecido/Liberado</StatusLiberacao><IDModulo>0</IDModulo><NumeroAcertos>46</NumeroAcertos><TempoRestante>2000-01-01T01:03:12</TempoRestante><CooperativaCentral>9999 - Instituição B</CooperativaCentral><CooperativaSingular>9999.1 - PA - Singular 1</CooperativaSingular>
E as transformações que preciso aplicar são:
1. As informações que estão dentro das tags <...> e </...> precisam ser removidas pq elas apenas indicam o início e fim da coluna;
2. As colunas que não tiverem informação precisam ser marcadas normalmente com o separador escolhido o pipeline (|)
Exemplo:
- Na primeira linha da string acima, que coloquei como exemplo não possui informação para a coluna CooperativaSingular, o ideal era que o XML nesse caso destacasse a coluna dessa forma: <CooperativaSingular></CooperativaSingular>, porém na primeira linha simplesmente a tag não aparece, logo pra quê simplificar se eles podem dificultar? Com isso, mesmo não havendo nenhuma informação, na transformação final eu preciso saber que este campo é reservado e isso se aplica para todas as outras colunas que podem ser vazias ou não;
3. As colunas com características de date ou datetime devem estar no formato YYYY-MM-DD;
4. Por fim, deve-se incluir o cabeçalho abaixo: NomeCandidato|CPF|IDInscricao|DataExame|NomeExame|DataProcessamento|SituacaoFinal|GrauObtido|StatusLiberacao|IDModulo|NumeroAcertos|TempoRestante|CooperativaCentral|CooperativaSingular
A ideia é que com as transformações acima feitas as linhas fiquem assim:
NomeCandidato|CPF|IDInscricao|DataExame|NomeExame|DataProcessamento|SituacaoFinal|GrauObtido|StatusLiberacao|IDModulo|NumeroAcertos|TempoRestante|CooperativaCentral|CooperativaSingular
Nome ficticio 1|12345678900|8523690|2009-10-02|Ouvidores|2009-10-05|R|63.00|Resultado Fornecido/Liberado|0|25|2000-01-01|0000 - Instituição A|
Nome ficticio 2|14785236900|9874561|2023-05-12|CPC-S100|2023-05-14|A|77.00|Resultado Fornecido/Liberado|0|46|2000-01-01|9999 - Instituição B|9999.1 - PA - Singular 1
O arquivo tem 50.000 linhas e o que fiz até agora foi essa parte de código:
#!/bin/bash
# Parâmetros externos
caminho="$1"
interface="$2"
# Definir a data atual no formato "YYYYMMDD"
data=$(date -d "$(date +%Y-%m-01) -1 month" "+%Y%m%d")
# Extrair os dados de resposta
echo "Extraindo dados de resposta..."
retorno=$(grep -o '<ObterResultadosInicioResult>.*</ObterResultadosInicioResult>' response.xml | sed -n 's/<ObterResultadosInicioResult>\(.*\)<\/ObterResultadosInicioResult>/\1/p')
# Verificar se existem dados de resultado
hasData=false
if [ -n "${retorno}" ] && [ "${retorno}" != "None" ]; then
hasData=true
fi
# Verificar se há dados
if [ "${hasData}" = true ]; then
echo "Dados encontrados. Gerando arquivo de saída..."
# Definir o cabeçalho
header="NomeCandidato|CPF|NomeExame|DataProcessamento|SituacaoFinal|GrauObtido|StatusLiberacao|IDModulo|NumeroAcertos|TempoRestante|CooperativaCentral|CooperativaSingular|IDInscricao|DataExame"
# Definir o nome do arquivo de saída
arquivo_saida="${caminho}/ARQUIVO_FINAL_${interface}_${data}.TXT"
# Escrever o cabeçalho no arquivo
echo "${header}" > "${arquivo_saida}"
# Substituir <DadosResultado> por vazio e </DadosResultado> por \n
echo "${retorno}" | sed 's|<DadosResultado>||g; s|<Dados>||g; s|</DadosResultado>|\n|g; s|</Dados>||g' >> "${arquivo_saida}"
echo "Arquivo de saída gerado em: ${arquivo_saida}"
else
echo "Nenhum dado encontrado."
fi
dos2unix "${arquivo_saida}"
rm -f "${caminho}/response.xml"
echo "Conversão para formato UNIX concluída."
No mais é isso, se puderem me ajudar agradeço demais!!!!!
Abraço.