-1
I am generating an sql script for a csv file. I would like to generate the sql file only where the id field is not empty. if the field is empty it jumps the line and does not generate that line in my sql script.
<?php
/**
* Created by PhpStorm.
*/
ini_set('memory_limit', '-1');
include 'utils.php';
// Filename contem o nome do CSV passado por parêmetro na linha de comando
$filename = (count($argv) > 3) ? $argv[3] : '';
// Lê o arquivo e o converte para um array com a lista de dados
$csv = parseCsv($filename);
// Extrai metadados do nome do
$path_parts = pathinfo($filename);
/**
* Dicionário de colunas.
* Cada item desse array deve conter a chave igual a coluna do cabeçalho do CSV
* e no valor o nome da coluna no banco de dados.
*/
$dicionario_colunas = [
'ID parâmetro' => 'ID',
'Nome do Parâmetro' => 'NOME_PARAMETRO',
'ID SKU' => 'ID_TR',
'Nome do TR/SKU' => 'TR_NOME',
'Unidade de medida que aparecem ao lado do resultado no laudo' => 'UNIDADE_RESULTADO',
'Categorias de resultados em texto que podem estar no laudo' => 'CATEGORIA_RESULTADO',
'Limite inferior de detecção' => 'LIMITE_INFERIOR',
'Limite superior de detecção' => 'LIMITE_SUPERIOR',
];
$csv = normalizeCsvArrayKeys($csv, $dicionario_colunas);
if (empty($csv)) {//verificando se o seu file.csv está vazio
die("Arquivo csv vazio\n");
}
$examesEquipamentos = [];
foreach ($csv as $linha) {
$examesEquipamentosId = trim($linha['ID']) . '-' . trim($linha['ID_TR']);
if (!array_key_exists($examesEquipamentosId, $examesEquipamentos) ) {
$examesEquipamentos[$examesEquipamentosId] = [
'ID' => trim($linha['ID']),
'NOME_PARAMETRO' => trim($linha['NOME_PARAMETRO']),
'ID_TR' => trim($linha['ID_TR']),
'TR_NOME' => trim(mb_strtoupper($linha['TR_NOME'])),
'UNIDADE_RESULTADO' => trim($linha['UNIDADE_RESULTADO']),
'CATEGORIA_RESULTADO' => trim($linha['CATEGORIA_RESULTADO']),
'LIMITE_INFERIOR' => trim($linha['LIMITE_INFERIOR']) ?:0,
'LIMITE_SUPERIOR' => trim($linha['LIMITE_SUPERIOR']) ?: 0,
];
//Para filtrar os id. se tiver vazio, não retornar isso na lista do script.se for contrário, dai retorna
$examesEquipamentos[$examesEquipamentosId] = array_filter($examesEquipamentos[$examesEquipamentosId], function ($valor) {
return trim($valor) !== '';
});
}
}
$migrationID = date('YmdHis');
$migrationRef = 'exames_tr_equipamentos';
$migrationName = $path_parts['filename'];
$outputName = $migrationID . '_' . $migrationRef . '_' . $migrationName . '.sql';
$output = fopen(ROOT . '/db_crx/migrations/' . $outputName, "w"); # not readedlines
try {
echo "\nProcessando os dados\n";
echo "Iniciando output.\n";
fwrite($output, "SET search_path = \"rx_ref\";\n");
fwrite($output, 'BEGIN;' . "\n\n");
fwrite($output, "UPDATE exames_tr_equipamentos SET obsoleto = NOW();\n");
if (!empty($examesEquipamentos)) {
fwrite($output, "\n" . "-- insert / update exames_tr_equipamentos\n");
foreach ($examesEquipamentos as $examesEqui) {
$stmt = "INSERT INTO exames_tr_equipamentos (exame_id, tr_equipamento_id, unidade, categoria_resultado, limite_inferior,limite_superior) VALUES (" .
"'{$examesEqui['ID']}','{$examesEqui['ID_TR']}', '{$examesEqui['UNIDADE_RESULTADO']}','{$examesEqui['CATEGORIA_RESULTADO']}',".
"'{$examesEqui['LIMITE_INFERIOR']}','{$examesEqui['LIMITE_SUPERIOR']}') ".
"ON CONFLICT (exame_id, tr_equipamento_id) DO UPDATE SET unidade = '{$examesEqui['UNIDADE_RESULTADO']}',".
"categoria_resultado = '{$examesEqui['CATEGORIA_RESULTADO']}',limite_inferior = '{$examesEqui['LIMITE_INFERIOR']}', limite_superior = '{$examesEqui['LIMITE_SUPERIOR']}',".
"obsoleto = null;\n";
fwrite($output, $stmt);
}
}
fwrite($output, "DELETE FROM exames_tr_equipamentos WHERE obsoleto IS NOT NULL;\n");
fwrite($output, "\n" .
"INSERT INTO public.crx_migrations (id, reference, description, filename) VALUES ('$migrationID', '$migrationRef', '$migrationName', '$outputName');\n");
fwrite($output, "\nCOMMIT;\n");
echo "Output pronto.\nVerifique o arquivo $outputName na pasta de migrações\n";
}
catch (Exception $e) {
echo "\n" . "Ocorreu uma exceção durante a geração do script:\n";
echo $e->getMessage() . "\n";
echo $e->getTraceAsString() . "\n";
if (file_exists($output)) {
unlink($output);
}
}
I think it broke when you published the code, when you made the comment,
– Bulfaitelo
explain to me, how so broke @ Bulfaitelo??
– Gladiador
The code , puts it complete, and then or before puts your remark
– Bulfaitelo
I put it there. The code snippet I tried to put was: //To filter the id. if empty, do not return it in the list of the script.if it is otherwise, dai returns $examsEquipments[$examesEquipments] = array_filter($examsEquipments[$examesEquipments], Function ($value) { Return Trim($value) != '; });
– Gladiador
These empty id would come from csv ? if yes how would they come ? being a valid value and not being valid value.
– Bulfaitelo
@Bulfaitelo yes, comes from csv. I simply want to fill my sql without the line that has an empty id
– Gladiador
Let’s go continue this discussion in chat.
– Bulfaitelo