Skip to content

Commit 1ffe7d5

Browse files
authored
Merge pull request #8940 from pedamoci/main
#10 - javascript
2 parents b973841 + 31550f1 commit 1ffe7d5

File tree

3 files changed

+338
-0
lines changed

3 files changed

+338
-0
lines changed
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
try {
2+
// creo un objeto y le hago un push para forzar un error ya que push es un metodo de array
3+
const obj = new Object
4+
obj.push()
5+
6+
} catch (error) { // capturo el error
7+
// imprimo el error completo y despues el nombre (tipo) y el mensaje por separado
8+
console.log(error)
9+
console.log(error.name)
10+
console.log(error.message)
11+
}
12+
13+
// -------------------------------------- DIFICULTAD EXTRA --------------------------------------
14+
class TipoDeDatoErroneo extends Error { // creo mi propio error sin mensaje (en este ejercicio no hace falta)
15+
constructor() {
16+
super()
17+
this.name = "TipoDeDatoErroneo"
18+
}
19+
}
20+
21+
// datos correctos
22+
let tipoDato = 'array'
23+
let longitud = 4
24+
let estructuraBase = []
25+
26+
// datos erroneos
27+
let tipoDatoErroneo = 'object'
28+
let longitudErronea = -1
29+
let longitudNaN = parseInt('g')
30+
let longitudUndefined = undefined
31+
let estructuraBaseErronea = {}
32+
33+
function crear(tipo, longitud, estructuraBase) {
34+
try {
35+
if (tipo !== 'array') throw new TipoDeDatoErroneo
36+
if (isNaN(longitud) || longitud < 0 || longitud === undefined) new Array(-1) // RangeError
37+
estructuraBase.push() // TypeError
38+
console.log('No ha ocurrido ningún error')
39+
}
40+
catch (e) {
41+
console.log(e.name)
42+
} finally {
43+
return 'La ejecución ha finalizado'
44+
}
45+
}
46+
47+
// ejecución sin errores
48+
console.log(crear(tipoDato, longitud, estructuraBase))
49+
50+
// ejecución con error propio
51+
console.log(crear(tipoDatoErroneo, longitud, estructuraBase))
52+
53+
// ejecuciones con RangeError
54+
console.log(crear(tipoDato, longitudErronea, estructuraBase))
55+
console.log(crear(tipoDato, longitudNaN, estructuraBase))
56+
console.log(crear(tipoDato, longitudUndefined, estructuraBase))
57+
58+
// ejecución con TypeError
59+
console.log(crear(tipoDato, longitud, estructuraBaseErronea))
Lines changed: 174 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,174 @@
1+
import fs from 'fs'
2+
const info = ['Pedro', 23, 'JavaScript']
3+
4+
5+
function archivoTxt(operation) {
6+
switch (operation) {
7+
case 'crearEnUnaLinea':
8+
fs.writeFileSync('pedamoci.txt', `Nombre: ${info[0]}\nEdad: ${info[1]}\nLenguaje favorito: ${info[2]}`)
9+
break;
10+
case 'crearEnVariasLineas':
11+
fs.writeFileSync('pedamoci.txt', `Nombre: ${info[0]}`)
12+
fs.appendFileSync('pedamoci.txt', `\nEdad: ${info[1]}`)
13+
fs.appendFileSync('pedamoci.txt', `\nLenguaje favorito: ${info[2]}`)
14+
break;
15+
case 'imprimir':
16+
console.log(fs.readFileSync('pedamoci.txt', 'utf8'))
17+
break;
18+
case 'borrar':
19+
fs.unlinkSync('./pedamoci.txt')
20+
console.log('Archivo borrado')
21+
break;
22+
default:
23+
break;
24+
}
25+
}
26+
27+
archivoTxt('crearEnUnaLinea')
28+
archivoTxt('imprimir')
29+
archivoTxt('borrar')
30+
archivoTxt('crearEnVariasLineas')
31+
archivoTxt('imprimir')
32+
archivoTxt('borrar')
33+
34+
// ---------------------------------------------- DIFICULTAD EXTRA ----------------------------------------------
35+
import readline from 'readline' // importe fs arriba
36+
37+
function preguntar(pregunta) {
38+
const rl = readline.createInterface({
39+
input: process.stdin,
40+
output: process.stdout
41+
})
42+
43+
return new Promise(resolve => {
44+
rl.question(pregunta, (respuesta) => {
45+
rl.close()
46+
resolve(respuesta)
47+
})
48+
})
49+
}
50+
51+
function actualizarDatos(info) { // borra la base de datos y la vuelve a crear con los estos actualizados
52+
let i = 0
53+
while (i < info.length) {
54+
if (i === 0) {
55+
fs.unlinkSync('./productos.txt')
56+
fs.writeFileSync('productos.txt', `[${info[i++]}], [${info[i++]}], [${info[i++]}]`) // lo ordena por nombre,cantidad vendida,precio
57+
} else {
58+
fs.appendFileSync('productos.txt', `\n[${info[i++]}], [${info[i++]}], [${info[i++]}]`)
59+
}
60+
}
61+
}
62+
63+
async function consultar() {
64+
let consultar = await preguntar('Ingrese "todo" o el "nombre de producto" según lo que quiera consultar: ')
65+
if (consultar === 'todo') {
66+
console.log(fs.readFileSync('productos.txt', 'utf8').replaceAll('[', '').replaceAll(']', '')) // imprime toda la base de datos
67+
} else {
68+
let info = fs.readFileSync('productos.txt', 'utf8').replaceAll("\n", ',').replace(/[\[\]\s]/g, '').split(',') // transforma el string de datos en un array con todos ellos separados
69+
console.log(info)
70+
if (info.includes(consultar)) {
71+
index = info.indexOf(consultar) // busca el index del nombre del producto
72+
console.log(`${consultar}, ${info[++index]}, ${info[++index]}`) // al index del producto se le suma 1 para saber la cantidad vendida y 2 para el precio
73+
} else console.log('El producto no existe')
74+
}
75+
}
76+
77+
async function actualizar() {
78+
let producto = await preguntar('Ingrese el nombre del producto que desea actualizar: ')
79+
let info = fs.readFileSync('productos.txt', 'utf8').replaceAll("\n", ',').replace(/[\[\]\s]/g, '').split(',') // transforma el string de datos en un array con todos ellos separados
80+
if (info.includes(producto)) {
81+
let update
82+
do {
83+
update = await preguntar('Que desea actualizar precio o cantidad?' + "\n")
84+
if (update === 'precio') {
85+
let precio = await preguntar('Ingrese el nuevo precio: ')
86+
info.splice(info.indexOf(producto) + 2, 1, precio) // remplaza el precio viejo por el nuevo
87+
} else if (update === 'cantidad') {
88+
let cantidad = await preguntar('Ingrese la nueva cantidad de ventas: ')
89+
info.splice(info.indexOf(producto) + 1, 1, cantidad)// remplaza la cantidad vendida vieja por la nueva
90+
}
91+
} while (update !== 'precio' && update !== 'cantidad')
92+
console.log(info)
93+
actualizarDatos(info)
94+
console.log('Producto actualizado')
95+
} else console.log('El producto no existe')
96+
}
97+
98+
async function borrar() {
99+
let producto = await preguntar('Ingrese el nombre del producto que quiere borrar: ')
100+
let info = fs.readFileSync('productos.txt', 'utf8').replaceAll("\n", ',').replace(/[\[\]\s]/g, '').split(',') // transforma el string de datos en un array con todos ellos separados
101+
if (info.includes(producto)) {
102+
index = info.indexOf(producto)
103+
info = info.slice(0,index).concat(info.slice(index + 3)) // al array de productos los separa en dos dejando fuera el producto que se desea eliminar y une las otras dos partes
104+
actualizarDatos(info)
105+
} else console.log('El producto no existe')
106+
}
107+
108+
async function calcular() {
109+
let calc = await preguntar('Ingresa:' + '\n' + 'total --> si queres calcular el total recaudado' + '\n' + 'producto --> si queres calcular lo recaudado de un producto' + '\n' + 'cantidad --> si queres calcular toda la cantidad vendida' + "\n")
110+
let result = 0
111+
let info = fs.readFileSync('productos.txt', 'utf8').replaceAll("\n", ',').replace(/[\[\]\s]/g, '').split(',') // transforma el string de datos en un array con todos ellos separados
112+
if (calc === 'total') {
113+
for (let i = 4; i < info.length; i++) { // empieza en 4 ya que los primero 3 valores son palabras y el cuarto es el nombre del primer producto
114+
result = result + (parseInt(info[i]) * parseInt(info[++i]))
115+
++i
116+
}
117+
console.log(`El total recaudado es de: $${result}`)
118+
} else if (calc === 'producto') {
119+
let producto = await preguntar('Ingrese el nombre del producto: ')
120+
if (info.includes(producto)) {
121+
let index = info.indexOf(producto)
122+
console.log(`Lo recaudado de ${producto} es $${parseInt(info[++index]) * parseInt(info[++index])}`)
123+
} else {
124+
console.log('El producto no existe')
125+
}
126+
} else if (calc === 'cantidad') {
127+
for (let i = 4; i < info.length; i++) { // empieza en 4 ya que los primero 3 valores son palabras y el cuarto es el nombre del primer producto
128+
result = result + parseInt(info[i])
129+
i = i + 2
130+
}
131+
console.log(`Se han vendido ${result} productos`)
132+
}
133+
}
134+
135+
async function program(operacion) {
136+
switch (operacion) {
137+
case 'añadir':
138+
let addProducto = await preguntar('Ingrese el nombre del producto: ')
139+
let addCantidadVendida = await preguntar('Ingrese la cantidad de ventas del producto: ')
140+
let addPrecio = await preguntar('Ingrese el precio del producto: ')
141+
fs.appendFileSync('productos.txt', `\n[${addProducto}], [${addCantidadVendida}], [${addPrecio}]`)
142+
console.log('El pruducto se ha añadido')
143+
break;
144+
case 'consultar':
145+
await consultar()
146+
break;
147+
case 'actualizar':
148+
await actualizar()
149+
break;
150+
case 'borrar':
151+
await borrar()
152+
break;
153+
case 'calcular':
154+
await calcular()
155+
break;
156+
case 'salir':
157+
fs.unlinkSync('./productos.txt')
158+
break;
159+
default:
160+
console.log('La operacion no existe')
161+
break;
162+
}
163+
}
164+
165+
async function start() {
166+
fs.writeFileSync('productos.txt', `[Producto], [Cantidad-Vendida], [Precio]`)
167+
let operacion
168+
do {
169+
operacion = await preguntar('Que operación desea realizar? (añadir, consultar, actualizar, borrar, calcular, salir)' + "\n")
170+
await program(operacion)
171+
} while (operacion !== 'salir')
172+
}
173+
174+
start()
Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
import fs from "fs"
2+
import readline from "readline";
3+
4+
function preguntar(pregunta) {
5+
const rl = readline.createInterface({
6+
input: process.stdin,
7+
output: process.stdout
8+
})
9+
10+
return new Promise(resolve => {
11+
rl.question(pregunta, (respuesta) => {
12+
rl.close()
13+
resolve(respuesta)
14+
})
15+
})
16+
}
17+
18+
19+
async function crearArchivo(tipo) {
20+
if (tipo === 'JSON') {
21+
let nombre = await preguntar('Ingrese su nombre: ')
22+
let edad = await preguntar('Ingrese su edad: ')
23+
let fechaNacimiento = await preguntar('Ingrese su fecha de nacimiento (xx/xx/xx): ')
24+
let lenguajesProgramacion = await preguntar('Ingrese los lenguajes de programación (lenguaje1, lenguaje2, ...): ')
25+
fs.writeFileSync('archivo.json', `{ "usuario": {` +
26+
`\n "nombre": "${nombre}",` +
27+
`\n "edad": "${edad}",` +
28+
`\n "fechaDeNacimiento": "${fechaNacimiento}",` +
29+
`\n "lenguajes": {`)
30+
lenguajesProgramacion = lenguajesProgramacion.split(', ')
31+
for (let i = 0; i < lenguajesProgramacion.length; i++) {
32+
if (i === lenguajesProgramacion.length - 1) fs.appendFileSync('archivo.json', `\n "lenguaje${i + 1}": "${lenguajesProgramacion[i]}"`)
33+
else fs.appendFileSync('archivo.json', `\n "lenguaje${i + 1}": "${lenguajesProgramacion[i]}",`)
34+
}
35+
fs.appendFileSync('archivo.json', `\n }` +
36+
`\n }` +
37+
`\n}`)
38+
console.log(fs.readFileSync('archivo.json', 'utf-8'))
39+
fs.unlinkSync('./archivo.json')
40+
} else if (tipo === 'XML') {
41+
let nombre = await preguntar('Ingrese su nombre: ')
42+
let edad = await preguntar('Ingrese su edad: ')
43+
let fechaNacimiento = await preguntar('Ingrese su fecha de nacimiento (xx/xx/xx): ')
44+
let lenguajesProgramacion = await preguntar('Ingrese los lenguajes de programación (lenguaje1, lenguaje2, ...): ')
45+
fs.writeFileSync('archivo.xml', `<?xml version="1.0" encoding="UTF-8"?>` +
46+
`\n<usuario>` +
47+
`\n <nombre>${nombre}</nombre>` +
48+
`\n <edad>${edad}</edad>` +
49+
`\n <fechaDeNacimiento>${fechaNacimiento}</fechaDeNacimiento>` +
50+
`\n <lenguajes>`)
51+
lenguajesProgramacion = lenguajesProgramacion.split(', ')
52+
for (let i = 0; i < lenguajesProgramacion.length; i++) {
53+
fs.appendFileSync('archivo.xml', `\n <lenguaje${i + 1}>${lenguajesProgramacion[i]}</lenguaje${i + 1}>`)
54+
}
55+
fs.appendFileSync('archivo.xml', `\n </lenguajes>` +
56+
`\n</usuario>`)
57+
console.log(fs.readFileSync('archivo.xml', 'utf-8'))
58+
fs.unlinkSync('./archivo.xml')
59+
}
60+
}
61+
62+
let tipo = await preguntar('Quieres crear el archivo en "XML" o "JSON"')
63+
tipo = tipo.toUpperCase()
64+
crearArchivo(tipo)
65+
66+
// ------------------------------------- DIFICULTAD EXTRA -------------------------------------
67+
// los imports de fs y readline estan arriba
68+
class Persona {
69+
constructor(nombre, edad, fechaNacimiento, lenguajes) {
70+
this.nombre = nombre
71+
this.edad = edad
72+
this.fechaNacimiento = fechaNacimiento
73+
this.lenguajes = lenguajes
74+
}
75+
76+
mostrarDatos() {
77+
console.log(`nombre: ${this.nombre}`)
78+
console.log(`edad: ${this.edad}`)
79+
console.log(`fechaDeNacimiento: ${this.fechaNacimiento}`)
80+
console.log(`lenguajes: ${this.lenguajes.join(', ')}`)
81+
}
82+
}
83+
84+
function transformar(nombreArchivo) {
85+
if (nombreArchivo.endsWith('.json')) {
86+
let archivo = fs.readFileSync(`${nombreArchivo}`, 'utf-8')
87+
let datos = JSON.parse(archivo)
88+
let lenguajes = Object.values(datos.usuario.lenguajes)
89+
const persona = new Persona (datos.usuario.nombre, datos.usuario.edad, datos.usuario.fechaDeNacimiento, lenguajes)
90+
persona.mostrarDatos()
91+
fs.unlinkSync(`./${nombreArchivo}`)
92+
} else if (nombreArchivo.endsWith('.xml')) {
93+
let archivo = fs.readFileSync(`${nombreArchivo}`, 'utf-8')
94+
let nombre = archivo.match(/<nombre>([^<]+)<\/nombre>/)[1] // busca las etiquetas <nombre></nombre> y devuelve lo que haya en el medio
95+
let edad = archivo.match(/<edad>([^<]+)<\/edad>/)[1] // busca las etiquetas <edad></edad> y devuelve lo que haya en el medio
96+
let fecha = archivo.match(/<fechaDeNacimiento>([^<]+)<\/fechaDeNacimiento>/)[1] // busca las etiquetas <fechaDeNacimiento></fechaDeNacimiento> y devuelve lo que haya en el medio
97+
let lenguajes = archivo.match(/<lenguajes>([\s\S]*?)<\/lenguajes>/)[1] // busca las etiquetas <lenguajes></lenguajes> y devuelve lo que haya en el medio
98+
lenguajes = lenguajes.replace(/<\/?[^>]+>/g, '') // remplaza '<', '/', '>' y lo que haya entre medio de '<' y '>' junto con lo que esta entre '</' y '>'
99+
lenguajes = lenguajes.match(/(?<![\w#+])([\w#+]+)(?![\w#+])/g) // busca todas las palabras que tengan un salto de line o espacio antes y despues
100+
const persona = new Persona (nombre, edad, fecha, lenguajes)
101+
persona.mostrarDatos()
102+
fs.unlinkSync(`./${nombreArchivo}`)
103+
}
104+
}
105+
transformar(await preguntar('Ingrese el nombre del archivo con la extension (".json" o ".xml")'))

0 commit comments

Comments
 (0)