145 lines
5.7 KiB
Python
145 lines
5.7 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
Conversor AUTOMÁTICO de CSVs para JavaScript
|
|
Lê TODAS as colunas automaticamente de cada CSV
|
|
"""
|
|
|
|
import csv
|
|
import json
|
|
import os
|
|
from datetime import datetime
|
|
|
|
# Lista de arquivos CSV para processar
|
|
CSV_FILES = {
|
|
'cantoneiras': 'BD/perfis/cantoneiras_brasil_completo.csv',
|
|
'barras_redondas': 'BD/perfis/barras_brasil_completo.csv',
|
|
'tubos_circulares': 'BD/perfis/tubos_circulares_brasil_completo.csv',
|
|
'perfis_i': 'BD/perfis/perfis_i_brasil_completo.csv',
|
|
'perfis_w': 'BD/perfis/perfis_w_brasil_completo.csv',
|
|
'tubos_rhs': 'BD/perfis/tubos_rhs_brasil_completo.csv',
|
|
'chapas': 'BD/perfis/chapas_brasil_completo.csv',
|
|
'perfis_hp': 'BD/perfis/perfis_hp_brasil_completo.csv',
|
|
'barras_roscadas': 'BD/perfis/barras_roscadas_brasil_completo.csv',
|
|
'barras_chatas': 'BD/perfis/barras_chatas_brasil_completo.csv'
|
|
}
|
|
|
|
def converter_valor(valor, coluna):
|
|
"""Converte valor para o tipo correto"""
|
|
valor = str(valor).strip().strip('"')
|
|
|
|
# Colunas numéricas
|
|
if any(x in coluna for x in ['_mm', '_kg', '_cm', '_m2', '_mpa', '_pol']):
|
|
try:
|
|
return float(valor)
|
|
except:
|
|
return 0
|
|
|
|
return valor
|
|
|
|
def ler_csv_automatico(arquivo):
|
|
"""Lê CSV automaticamente detectando todas as colunas"""
|
|
dados = []
|
|
|
|
if not os.path.exists(arquivo):
|
|
print(f"⚠️ Arquivo não encontrado: {arquivo}")
|
|
return dados, []
|
|
|
|
try:
|
|
with open(arquivo, 'r', encoding='utf-8') as f:
|
|
reader = csv.DictReader(f)
|
|
colunas = reader.fieldnames
|
|
|
|
for row in reader:
|
|
item = {}
|
|
for col in colunas:
|
|
item[col] = converter_valor(row[col], col)
|
|
dados.append(item)
|
|
|
|
print(f"✅ {arquivo}: {len(dados)} itens, {len(colunas)} colunas")
|
|
return dados, colunas
|
|
|
|
except Exception as e:
|
|
print(f"❌ Erro ao ler {arquivo}: {e}")
|
|
return dados, []
|
|
|
|
def gerar_javascript(dados_todos):
|
|
"""Gera arquivo JavaScript com todos os dados"""
|
|
|
|
timestamp = datetime.now().timestamp()
|
|
|
|
js_content = f'''/**
|
|
* BANCO DE DADOS COMPLETO - Todos os Perfis
|
|
* Dados embutidos em JavaScript para funcionamento autônomo
|
|
* Gerado automaticamente a partir dos CSVs
|
|
*
|
|
* @version 2.0.0
|
|
* @date {timestamp}
|
|
*/
|
|
|
|
const BANCO_DADOS_PERFIS = {json.dumps(dados_todos, indent=2, ensure_ascii=False)};
|
|
|
|
// Exportar para uso global
|
|
if (typeof window !== 'undefined') {{
|
|
window.BANCO_DADOS_PERFIS = BANCO_DADOS_PERFIS;
|
|
}}
|
|
|
|
console.log('✅ Banco de dados carregado:', Object.keys(BANCO_DADOS_PERFIS).length, 'tipos');
|
|
'''
|
|
|
|
return js_content
|
|
|
|
def main():
|
|
print("╔════════════════════════════════════════════════════════════╗")
|
|
print("║ Conversor AUTOMÁTICO de CSVs para JavaScript ║")
|
|
print("╠════════════════════════════════════════════════════════════╣")
|
|
print("║ Lê TODAS as colunas automaticamente de cada CSV ║")
|
|
print("╚════════════════════════════════════════════════════════════╝")
|
|
print()
|
|
|
|
dados_todos = {}
|
|
total_itens = 0
|
|
|
|
for tipo, arquivo in CSV_FILES.items():
|
|
print(f"📊 Processando {tipo}...")
|
|
dados, colunas = ler_csv_automatico(arquivo)
|
|
|
|
if dados:
|
|
dados_todos[tipo] = dados
|
|
total_itens += len(dados)
|
|
print(f" Colunas: {', '.join(colunas[:5])}...")
|
|
print()
|
|
|
|
if not dados_todos:
|
|
print("❌ Nenhum dado foi processado!")
|
|
return
|
|
|
|
print("🔧 Gerando arquivo JavaScript...")
|
|
js_content = gerar_javascript(dados_todos)
|
|
|
|
# Salvar arquivo
|
|
output_file = 'js/database/banco-dados-completo.js'
|
|
os.makedirs(os.path.dirname(output_file), exist_ok=True)
|
|
|
|
with open(output_file, 'w', encoding='utf-8') as f:
|
|
f.write(js_content)
|
|
|
|
file_size = os.path.getsize(output_file)
|
|
|
|
print(f"✅ Arquivo gerado: {output_file}")
|
|
print(f"📊 Total de itens: {total_itens}")
|
|
print(f"📁 Tamanho: {file_size} bytes (~{file_size//1024}KB)")
|
|
print()
|
|
print("╔════════════════════════════════════════════════════════════╗")
|
|
print("║ ✅ CONVERSÃO CONCLUÍDA ║")
|
|
print("╠════════════════════════════════════════════════════════════╣")
|
|
print(f"║ Arquivo gerado: {output_file:40s} ║")
|
|
print("║ ║")
|
|
print("║ Próximos passos: ║")
|
|
print("║ 1. Testar aplicação ║")
|
|
print("║ 2. Verificar carregamento dos dados ║")
|
|
print("║ 3. Fazer deploy ║")
|
|
print("╚════════════════════════════════════════════════════════════╝")
|
|
|
|
if __name__ == '__main__':
|
|
main()
|