Datos y textoProyecto final · Difícil · 35 min

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));
La consola aparece aquí (console.log).

Para profundizar: la referencia de RFC 4180 (en inglés) →

¿Esto en producción, con tus datos? Hablemos 15 minutos →