#!/usr/bin/env python3 """ Conversor de CSVs para JavaScript Converte todos os CSVs da pasta BD/perfis/ em um arquivo JavaScript """ import csv import json import os from pathlib import Path # Configuração dos arquivos CSV CSV_CONFIG = { 'cantoneiras': { 'arquivo': 'BD/perfis/cantoneiras_brasil_completo.csv', 'colunas': ['id', 'nome', 'lado_mm', 'espessura_mm', 'peso_kg_m', 'area_cm2', 'momento_inercia_cm4', 'raio_giracao_cm', 'tipo'] }, 'barras_redondas': { 'arquivo': 'BD/perfis/barras_brasil_completo.csv', 'colunas': ['id', 'nome', 'diametro_mm', 'peso_kg_m', 'area_cm2', 'momento_inercia_cm4', 'raio_giracao_cm', 'aplicacao', 'tipo'] }, 'tubos_circulares': { 'arquivo': 'BD/perfis/tubos_circulares_brasil_completo.csv', 'colunas': ['id', 'nome', 'diametro_mm', 'espessura_mm', 'peso_kg_m', 'area_cm2', 'momento_inercia_cm4', 'raio_giracao_cm', 'aplicacao', 'tipo'] }, 'perfis_i': { 'arquivo': 'BD/perfis/perfis_i_brasil_completo.csv', 'colunas': ['id', 'nome', 'altura_mm', 'largura_mm', 'espessura_alma_mm', 'espessura_mesa_mm', 'peso_kg_m', 'area_cm2', 'tipo'] }, 'perfis_w': { 'arquivo': 'BD/perfis/perfis_w_brasil_completo.csv', 'colunas': ['id', 'nome', 'altura_mm', 'largura_mm', 'espessura_alma_mm', 'espessura_mesa_mm', 'peso_kg_m', 'area_cm2', 'tipo'] }, 'tubos_rhs': { 'arquivo': 'BD/perfis/tubos_rhs_brasil_completo.csv', 'colunas': ['id', 'nome', 'largura_mm', 'altura_mm', 'espessura_mm', 'peso_kg_m', 'area_cm2', 'tipo'] }, 'chapas': { 'arquivo': 'BD/perfis/chapas_brasil_completo.csv', 'colunas': ['id', 'nome', 'espessura_mm', 'peso_kg_m2', 'tipo'] }, 'perfis_hp': { 'arquivo': 'BD/perfis/perfis_hp_brasil_completo.csv', 'colunas': ['id', 'nome', 'altura_mm', 'largura_mm', 'espessura_alma_mm', 'espessura_mesa_mm', 'peso_kg_m', 'area_cm2', 'tipo'] }, 'barras_roscadas': { 'arquivo': 'BD/perfis/barras_roscadas_brasil_completo.csv', 'colunas': ['id', 'nome', 'diametro_mm', 'passo_mm', 'peso_kg_m', 'area_cm2', 'tipo'] }, 'barras_chatas': { 'arquivo': 'BD/perfis/barras_chatas_brasil_completo.csv', 'colunas': ['id', 'nome', 'largura_mm', 'espessura_mm', 'peso_kg_m', 'area_cm2', 'tipo'] } } def converter_valor(valor, coluna): """Converte valor para o tipo correto""" valor = valor.strip().strip('"') # Colunas numéricas if any(x in coluna for x in ['_mm', '_kg', '_cm', '_m2']): try: return float(valor) except: return 0 return valor def ler_csv(arquivo, colunas): """Lê um arquivo CSV e retorna lista de dicionários""" 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) for row in reader: item = {} for col in colunas: if col in row: item[col] = converter_valor(row[col], col) else: item[col] = '' dados.append(item) print(f"✅ {arquivo}: {len(dados)} itens") return dados 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""" js_content = '''/** * BANCO DE DADOS COMPLETO - Todos os Perfis * Dados embutidos em JavaScript para funcionamento autônomo * Gerado automaticamente a partir dos CSVs * * @version 1.0.0 * @date ''' + str(Path(__file__).stat().st_mtime) + ''' */ const BANCO_DADOS_PERFIS = ''' js_content += json.dumps(dados_todos, indent=2, ensure_ascii=False) js_content += '''; // Exportar para uso global window.BANCO_DADOS_PERFIS = BANCO_DADOS_PERFIS; console.log('✅ Banco de dados completo carregado'); console.log('📊 Tipos disponíveis:', Object.keys(BANCO_DADOS_PERFIS)); Object.entries(BANCO_DADOS_PERFIS).forEach(([tipo, dados]) => { console.log(` - ${tipo}: ${dados.length} itens`); }); ''' return js_content def main(): print(""" ╔════════════════════════════════════════════════════════════╗ ║ Conversor de CSVs para JavaScript ║ ╠════════════════════════════════════════════════════════════╣ ║ Converte todos os CSVs em um arquivo JavaScript único ║ ╚════════════════════════════════════════════════════════════╝ """) dados_todos = {} total_itens = 0 # Processar cada CSV for tipo, config in CSV_CONFIG.items(): print(f"\n📊 Processando {tipo}...") dados = ler_csv(config['arquivo'], config['colunas']) dados_todos[tipo] = dados total_itens += len(dados) # Gerar arquivo JavaScript print(f"\n🔧 Gerando arquivo JavaScript...") js_content = gerar_javascript(dados_todos) # Salvar arquivo output_file = 'js/database/banco-dados-completo.js' with open(output_file, 'w', encoding='utf-8') as f: f.write(js_content) print(f"\n✅ Arquivo gerado: {output_file}") print(f"📊 Total de itens: {total_itens}") print(f"📁 Tamanho: {len(js_content)} bytes (~{len(js_content)//1024}KB)") print(""" ╔════════════════════════════════════════════════════════════╗ ║ ✅ CONVERSÃO CONCLUÍDA ║ ╠════════════════════════════════════════════════════════════╣ ║ Arquivo gerado: js/database/banco-dados-completo.js ║ ║ ║ ║ Próximos passos: ║ ║ 1. Adicionar script no index.html ║ ║ 2. Testar aplicação ║ ║ 3. Fazer deploy ║ ╚════════════════════════════════════════════════════════════╝ """) if __name__ == '__main__': main()