Este proyecto es una herramienta en TypeScript para procesar y formatear datos de archivos CSV. Está diseñado para ser altamente configurable y reutilizable, permitiendo el procesamiento de diferentes tipos de archivos CSV con distintas estructuras.
- Procesamiento de archivos CSV con separador personalizable
- Sistema de formateo modular y extensible
- Validación de campos requeridos
- Manejo de errores robusto
- Generación de archivo CSV formateado
- Logging detallado del proceso
- Configuración flexible para diferentes tipos de CSV
- Soporte para múltiples codificaciones
.
├── data/ # Directorio para archivos CSV
│ └── raw_data.csv # Archivo CSV original (no incluido en el repositorio)
├── src/ # Código fuente
│ ├── config/ # Configuraciones
│ │ └── default.ts
│ ├── formatters/ # Formateadores reutilizables
│ │ └── index.ts
│ ├── services/ # Servicios
│ │ └── CsvFormatter.ts
│ ├── types/ # Tipos y interfaces
│ │ └── index.ts
│ └── index.ts # Punto de entrada
├── tsconfig.json # Configuración de TypeScript
└── package.json # Dependencias del proyecto
- Node.js
- npm/yarn
- TypeScript
- Clonar el repositorio
- Instalar dependencias:
npm installEl archivo CSV de entrada (raw_data.csv) debe estar:
- En la carpeta
data/ - Con codificación UTF-8
- Usando punto y coma (;) como delimitador
- Con las columnas especificadas en la configuración
El proyecto utiliza un sistema de configuración flexible que permite:
- Definir columnas y sus formateadores
- Especificar campos requeridos
- Configurar delimitadores de entrada y salida
- Establecer codificaciones
Ejemplo de configuración:
const config = {
inputConfig: {
delimiter: ';',
encoding: 'utf8',
quote: '"',
escape: '"'
},
outputConfig: {
delimiter: ',',
encoding: 'utf8',
quote: '"',
escape: '"'
},
columns: [
createColumnConfig('ID', normalizeText, true),
createColumnConfig('NOMBRE', formatText, true),
createColumnConfig('EMAIL', formatEmail, true)
]
};- Colocar el archivo CSV original en
./data/raw_data.csv - Ejecutar el script:
npx ts-node src/index.ts- El archivo formateado se generará en
./data/data.csv
import { CsvFormatter } from './services/CsvFormatter';
import { createColumnConfig } from './formatters';
// Crear configuración personalizada
const customConfig = {
inputConfig: {
delimiter: ';',
encoding: 'utf8',
quote: '"',
escape: '"'
},
outputConfig: {
delimiter: ',',
encoding: 'utf8',
quote: '"',
escape: '"'
},
columns: [
// Definir tus propias columnas y formateadores
]
};
// Crear instancia del formateador
const formatter = new CsvFormatter(customConfig);
// Procesar archivo
await formatter.processFile('input.csv', 'output.csv');normalizeText: Normaliza caracteres especiales y elimina diacríticosformatText: Limpia espacios y caracteres no imprimibles
formatEmail: Formatea correos electrónicos (minúsculas, sin espacios)
formatPhoneNumber: Formatea números de teléfono al formato internacional
formatUrl: Normaliza URLs (https://, sin www)
Puedes crear tus propios formateadores siguiendo el patrón:
const miFormateador = (value: string): string => {
if (!value) return '';
// Tu lógica de formateo aquí
return value;
};El sistema incluye:
- Validación de campos requeridos
- Manejo de errores de lectura/escritura
- Logging detallado
- Resultados estructurados
- csv-parse: ^3.2.0
- csv-stringify: ^6.4.5
- typescript: ^5.8.2
- ts-node: ^10.9.2
- @types/node: ^22.13.17