Files
SteelBase/scripts/converter-csv-para-js.py

173 lines
6.8 KiB
Python

#!/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()