CSV - Processamento de Arquivos CSV
O que é este Node?
O CSV é o node responsável por ler, processar e gerar arquivos CSV (Comma-Separated Values) de forma nativa, sem dependências externas.
Por que este Node existe?
CSV é um formato universal para importação/exportação de dados tabulares. O CSV existe para:
- Importação de Dados: Ler planilhas e importar para sistema
- Exportação: Gerar relatórios em formato CSV
- Transformação: Converter entre CSV e JSON
- Integração: Trocar dados entre sistemas diferentes
Como funciona internamente?
async executeCSV(data: any, variables: Record<string, any>): Promise<any> {
try {
this.logger.log('📊 [CSV] Processing CSV data');
switch (data.operation) {
case 'parse':
const lines = data.csvString.split('\n');
const headers = lines[0].split(',');
const rows = lines.slice(1).map(line => {
const values = line.split(',');
return headers.reduce((obj, header, index) => {
obj[header.trim()] = values[index]?.trim();
return obj;
}, {});
});
return {
success: true,
data: rows,
count: rows.length,
};
case 'stringify':
const csvLines = [data.headers.join(',')];
data.data.forEach(row => {
csvLines.push(data.headers.map(header => row[header] || '').join(','));
});
return {
success: true,
csvString: csvLines.join('\n'),
rows: data.data.length,
};
default:
throw new Error(`Unknown CSV operation: ${data.operation}`);
}
} catch (error) {
this.logger.error('CSV execution error:', error);
throw error;
}
}
Parâmetros
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| operation | string | Sim | parse/stringify |
| csvString | string | Sim* | String CSV (*para parse) |
| data | array | Sim* | Array de objetos (*para stringify) |
| headers | array | Sim* | Cabeçalhos (*para stringify) |
| delimiter | string | Não | Delimitador (padrão: ,) |
Exemplo: Importar Lista de Clientes
JSON para Importar
{
"name": "Importar Clientes CSV",
"nodes": [
{
"id": "start_1",
"type": "start",
"position": { "x": 100, "y": 100 },
"data": { "label": "Início" }
},
{
"id": "variable_1",
"type": "variable",
"position": { "x": 300, "y": 100 },
"data": {
"label": "CSV String",
"parameters": {
"variableName": "csvData",
"value": "nome,email,telefone\nJosé Roberto,jose@exemplo.com,11999999999\nMaria Silva,maria@exemplo.com,11988888888"
}
}
},
{
"id": "csv_1",
"type": "csv",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Parse CSV",
"parameters": {
"operation": "parse",
"csvString": "{{csvData}}"
}
}
},
{
"id": "message_1",
"type": "message",
"position": { "x": 700, "y": 100 },
"data": {
"label": "Resultado",
"parameters": {
"message": "Importados {{count}} clientes do CSV"
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 900, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "variable_1" },
{ "source": "variable_1", "target": "csv_1" },
{ "source": "csv_1", "target": "message_1" },
{ "source": "message_1", "target": "end_1" }
]
}
Resposta do Node
Parse:
{
"success": true,
"data": [
{ "nome": "José Roberto", "email": "jose@exemplo.com", "telefone": "11999999999" },
{ "nome": "Maria Silva", "email": "maria@exemplo.com", "telefone": "11988888888" }
],
"count": 2
}
Stringify:
{
"success": true,
"csvString": "nome,email\nJosé Roberto,jose@exemplo.com\nMaria Silva,maria@exemplo.com",
"rows": 2
}
Boas Práticas
✅ SIM: Validar CSV antes de processar, Tratar vírgulas em valores, Usar encoding UTF-8 ❌ NÃO: Processar CSVs gigantes de uma vez, Ignorar escape de caracteres, Assumir formato
Dicas
💡 Dica 1: Para CSVs com vírgulas nos valores, use aspas: "Nome, Sobrenome",email
💡 Dica 2: Sempre valide se primeira linha são cabeçalhos
💡 Dica 3: Use delimiter customizado para TSV (tab): \t
💡 Dica 4: Processe CSVs grandes em chunks para evitar estouro de memória
Próximos Nodes
→ GOOGLE_SHEETS - Integração com Google Sheets → EXCEL - Processar arquivos Excel → JSON - Converter entre formatos