Ejercicio: Módulos: CommonJS, ES Modules, fs y path
Objetivo
Practicar con módulos y archivos reales en tu computadora, y escribir tres funciones de JavaScript puro que procesan lo que normalmente llega de process.argv y de un archivo CSV.
Cómo se trabaja
La parte A se hace en tu computadora: creas un pequeño proyecto con dos módulos y lees y escribes archivos. La parte B son tres funciones de JavaScript puro que puedes probar aquí y comprobar en el navegador. Pega solo las funciones, sin <script>.
Pasos
Marca cada paso a medida que lo completes. Tu avance se guarda en este navegador.
💡 Pista 1: parsearArgumentos
Recorre el array con un for con índice. Cuando uses el siguiente argumento como valor, incrementa i otra vez para saltarlo.
💡 Pista 2: cambiarExtension
"datos/notas.txt".lastIndexOf(".") da la posición del último punto; con slice(0, posicion) te quedas con la parte anterior. Si devuelve -1, no hay extensión.
💡 Pista 3: csvAObjetos
texto.split("\n") separa las líneas. Cada línea se separa por "," con otro split y se desestructura: const [nombre, edad] = linea.split(",").
🔎 Comprueba tu trabajo
Pega tu código y pulsa Comprobar. La revisión ocurre en tu navegador; nada se envía a ningún sitio. Cada punto en rojo incluye una pista. Pega solo el JavaScript, sin las etiquetas <script>.
✅ Ver una solución posible
Intenta resolverlo antes de mirar. Tu versión puede ser distinta y también correcta.
function parsearArgumentos(args) {
const resultado = { _: [] };
for (let i = 0; i < args.length; i++) {
const actual = args[i];
if (actual.startsWith("--")) {
const clave = actual.slice(2);
const siguiente = args[i + 1];
if (siguiente !== undefined && !siguiente.startsWith("--")) {
resultado[clave] = siguiente;
i++;
} else {
resultado[clave] = true;
}
} else {
resultado._.push(actual);
}
}
return resultado;
}
function cambiarExtension(ruta, nueva) {
const punto = ruta.lastIndexOf(".");
const base = punto === -1 ? ruta : ruta.slice(0, punto);
return `${base}.${nueva}`;
}
function csvAObjetos(texto) {
return texto
.split("\n")
.filter((linea) => linea.trim() !== "")
.map((linea) => {
const [nombre, edad] = linea.split(",");
return { nombre, edad: Number(edad) };
});
}
💡 🏁 Reto extra (opcional)
Añade a app.js una opción --mayus que, usando parsearArgumentos, escriba el resumen en mayúsculas. Importa parsearArgumentos desde un módulo propio.