Proyecto final: de CSV sucio a resumen fiable
Junta lo del bloque: parsear CSV con comillas, validar cada campo con su línea y agregar por modelo.
Combina los 6 ejercicios del bloque Datos y texto. Se desbloquea al terminarlos, pero puedes intentarlo ya.
RUNS es un registro de pruebas de velocidad tal como lo lleva la gente: notas entre comillas, una línea en blanco, erratas y finales de línea \r\n. Escribe summarize(csv) que devuelva { valid, errors, byModel }.
1. Parte en líneas (\n o \r\n). La línea 1 es la cabecera. Salta las líneas en blanco, pero cuéntalas para numerar. Los campos pueden ir entre comillas con comas dentro y "" como comilla; no habrá saltos de línea dentro de un campo.
2. Valida cada fila: model no vacío, date una fecha real AAAA-MM-DD y tokens_per_sec un número mayor que 0. Por cada campo que falle añade { line, field } a errors, en orden de columna. Una fila con algún error no cuenta.
3. valid es el número de filas correctas. byModel es una lista { model, runs, avgTps } ordenada por model, con la media redondeada a un decimal. Usa ese orden de claves.
Retos 0/5
- Cuenta 5 filas válidas (las comillas no rompen la fila)
- Señala cada error con su línea y su campo
- Agrega por modelo: ejecuciones y media con un decimal
- Una fila con tres problemas da tres errores, en orden de columna
- No falla con un texto vacío ni con solo la cabecera
function summarize(csv) {
// 1. parte en líneas (\n o \r\n); la línea 1 es la cabecera; salta las líneas en blanco pero cuéntalas
// 2. parte cada línea en campos: una coma dentro de "comillas" no separa, y "" es una comilla
// 3. valida model (no vacío), date (una fecha real AAAA-MM-DD) y tokens_per_sec (un número mayor que 0)
// 4. media de tokens_per_sec por modelo con las filas válidas, un decimal, ordenada por model
return { valid: 0, errors: [], byModel: [] };
}
console.log(summarize(RUNS));Para profundizar: la referencia de RFC 4180 (en inglés) →
¿Esto en producción, con tus datos? Hablemos 15 minutos →