Saltar navegación

20250505 EjerFichCSV_3 - Contenido educativo

Ajuste de pantalla

El ajuste de pantalla se aprecia al ver el vídeo en pantalla completa. Elige la presentación que más te guste:

Subido el 7 de mayo de 2025 por Raquel G.

8 visualizaciones

Descargar la transcripción

sería lo más divertido 00:00:00
bueno, tenemos el fichero 00:00:02
antes que nada 00:00:04
pues no tenemos, vamos a crear un fichero 00:00:05
por ahí, por algún lado, en el escritorio 00:00:08
porque como nuestra aplicación nos lo abre 00:00:10
con el file chooser 00:00:12
en el escritorio mismo 00:00:13
lo voy a poner, ala, el fichero csv 00:00:16
venga 00:00:18
personas 00:00:22
punto csv 00:00:24
como si quiero poner punto 00:00:27
Pepito Pérez 00:00:28
Me da lo mismo 00:00:29
Y ahora 00:00:30
Me lo abre como Excel 00:00:34
No quiero Excel, claro 00:00:37
Quiero el blog de notas 00:00:38
Venga, pues hala 00:00:43
Este se va a llamar 00:00:51
Pepe 00:00:52
Y tiene dos teléfonos 00:00:54
Y esta 00:00:59
Se va a llamar Luisa 00:01:00
Tiene este DNI 00:01:02
y tiene tres teléfonos. 00:01:04
¡Hala! 00:01:11
Venga, pues este es nuestro CSV 00:01:15
con nombres de personas, teléfonos 00:01:16
y sus NIFs. 00:01:19
Vamos a darle al botón. 00:01:21
A ver, por lo pronto ya no es de error. 00:01:23
Aunque todavía no podemos comprobar si el fichero de objetos 00:01:24
tiene cosas que tengan sentido, ¿no? 00:01:26
Pero bueno, 00:01:28
vamos a probar. 00:01:30
Seleccionamos CSV. 00:01:43
queremos 00:01:45
escritorio 00:01:47
personas 00:01:49
abrir, personas CSV 00:01:55
el get name, solo me ofrece el nombre, no toda la ruta 00:02:00
ya lo 00:02:02
vale, pues ahora vamos a serializar 00:02:03
aquí van a salir cosas rojas o no, yo 00:02:06
a un 90% digo que sí 00:02:08
no, no, no 00:02:09
¿veis? 00:02:12
ya solo con que 00:02:18
no lo he puesto 00:02:19
y ninguno me habéis dicho nada 00:02:22
bueno, pero no he serializado persona 00:02:24
vamos a ver 00:02:30
vamos a ver 00:02:34
vamos a ver 00:02:34
vamos a serializar 00:02:38
persona 00:02:40
eso ya sabemos seguro que es una de las otras cosas 00:02:41
que sea el único 00:02:44
aquí de lo que se trata es de ir entendiendo su idioma 00:02:45
Vale 00:02:48
Esto lo entendemos 00:02:49
Venga 00:02:52
Implements 00:02:53
Serializable 00:02:57
Vale 00:03:01
Aquí cuando nos sale lo de la cosita amarilla 00:03:02
Ya nos da un poco de rabia 00:03:08
Porque nos saca una cosita amarilla 00:03:10
De uy no le has dado clave de serialización 00:03:12
No sé 00:03:14
Lo que es una clave de serialización 00:03:16
Bueno nosotros tiramos 00:03:18
mientras las cosas funcionan 00:03:19
cuando hay gente funcional 00:03:21
o sea, más que una clave 00:03:22
o sea, un código 00:03:24
que identifica de forma única 00:03:27
es como si fuera un hash 00:03:29
pero no es exactamente un hash 00:03:30
es que algunas clases 00:03:32
que serializan lo utilizan 00:03:35
a saber de qué manera 00:03:37
pero otras no 00:03:38
entonces bueno, es una especie de cosa 00:03:39
vamos a ver qué pasa ahora 00:03:42
seleccionamos otra vez 00:03:44
personas 00:03:50
serializar 00:03:57
nos sigue saliendo algo rojo 00:03:59
¿vale? ya no es ese error 00:04:02
pero ¿cuál es? 00:04:04
criterio 00:04:10
vamos a sobrevivir 00:04:11
vamos a probar 00:04:21
aquí de lo que se trata es de no quedarse parados 00:04:34
y hacer cosas con sentido 00:04:41
no, y que le resuelvas 00:04:42
y para resolverle 00:04:46
tienes que ir probando cosas que tengan sentido 00:04:49
vamos a probar esto 00:04:50
está claro que tiene que ver con la serialización 00:04:53
vamos a probar 00:04:55
vamos a 00:04:56
venga 00:04:57
ya no me ha dado nada rojo 00:04:58
ya no me ha dado nada rojo 00:05:21
vamos a ver si me ha creado 00:05:23
el fichero 00:05:26
crearlo, me lo ha creado 00:05:29
pero ahora mismo no tiene sentido que yo lo mire así 00:05:30
así veo 00:05:33
cosas 00:05:34
pero no sé si este fichero 00:05:35
realmente está bien creado como 00:05:38
para que otra aplicación 00:05:40
con object input string lo interprete 00:05:43
pues es lo que vamos a hacer en el otro botón 00:05:45
vamos ahora a leer este fichero 00:05:46
con object input string que es para lo que está 00:05:48
pensado, claro 00:05:50
que es para lo que está pensado 00:05:52
y para ver 00:05:54
si se ha construido bien, pues si se ha construido bien 00:05:56
ya podemos distribuirlo y decir, oye, tu aplicación 00:05:58
que usas personas, ese es el archivo de objetos 00:06:00
es un archivo que tiene personas serializadas 00:06:02
pues vamos a leerlo con la clase correspondiente 00:06:14
si se ha creado con 00:06:17
object output string hay que leerlo con object input string 00:06:18
pues venga 00:06:20
eso será este 00:06:22
este otro de aquí 00:06:25
vale, a mí lo de que 00:06:27
criterio tiene que ser serializable 00:06:29
me ha desconcertado, pero 00:06:31
de lo que se trata es que 00:06:33
si vamos a resolver con criterio, si me dice 00:06:34
no serializable exceptio en criterio 00:06:37
pues yo te pongo serializable 00:06:39
y si con eso 00:06:40
tiras, pues ya está 00:06:42
ala, comprobar 00:06:44
evento 00:06:47
vale, pues entonces 00:06:50
tenemos que abrir con object input 00:06:55
string el fichero de objetos 00:06:58
bueno, lo monto ya directamente sobre el 00:07:00
file input string 00:07:08
y ahora este tiene que ir obligatoriamente 00:07:09
sobre un 00:07:24
new file input 00:07:25
string 00:07:28
con el nombre del archivo 00:07:31
que nos lo hemos inventado nosotros 00:07:33
que era 00:07:35
no, el de objetos 00:07:35
se llama personas.dat 00:07:41
personas.dat 00:07:42
vale 00:07:48
importamos 00:07:51
e importamos 00:07:58
¿eh? 00:08:01
¿qué horas estoy guardando? 00:08:04
están guardadas en el fichero 00:08:06
ahora las voy a llevar a las variables 00:08:07
en las que caen, que son en variables de tipo 00:08:10
persona, claro 00:08:12
pues 00:08:13
venga 00:08:16
para que, voy a meterlo todo en el mismo 00:08:16
try, todo 00:08:27
y así no tengo que estar capturando todo el rato 00:08:28
bueno, ahora 00:08:31
bucle de lectura, el bucle de lectura 00:08:33
de objetos 00:08:35
recordad que el bucle de lectura de objetos 00:08:36
lo hacíamos, capturando 00:08:39
la excepción fin de archivo 00:08:41
Hacíamos un boolean y asumíamos inicialmente un boolean fin, que inicialmente no habíamos acabado. 00:08:43
Y ahora ya nos hacíamos un bucle. 00:08:52
Mientras no hayamos acabado el archivo, intenta leer. 00:09:03
Intenta leer un objeto. 00:09:10
¿Cómo leíamos un objeto? 00:09:13
objetos 00:09:14
react 00:09:15
object 00:09:16
y ahora 00:09:19
esto donde tiene que ir 00:09:21
a un objeto persona 00:09:23
un objeto persona 00:09:25
vale 00:09:29
y ahora este bucle 00:09:30
o sea 00:09:34
mientras 00:09:34
no salte la excepción 00:09:36
de no file except 00:09:39
porque si salta la excepción 00:09:40
de no file exception, pues entonces ya 00:09:43
ponemos fin true 00:09:45
y ahora, ahora ya es cuando 00:09:47
me dice lo del casting 00:09:56
porque read object está 00:09:58
en tiempo de escritura de código 00:10:00
para que devuelva un object 00:10:03
yo sé, porque estoy coordinada en la aplicación 00:10:04
que va a ser persona, entonces este casting tiene sentido 00:10:07
y ahora 00:10:09
Espera, voy a añadir 00:10:12
Esto será una excepción 00:10:13
Voy a añadir la excepción a esta 00:10:15
Ya está 00:10:18
Y ahora ya, ¿qué queríamos hacer con esto? 00:10:19
Mostrarlo en la interfaz 00:10:23
Para comprobar 00:10:24
Que los objetos persona 00:10:26
Pues venga 00:10:27
Vamos a 00:10:29
Teníamos aquí dos 00:10:31
Textos de área, no sé de pa' qué 00:10:33
La primera es para el CSV 00:10:35
La segunda para los que has creado 00:10:37
Ah, igual que cuando le damos a seleccionar CSV 00:10:40
Que nos apareciera aquí el contenido 00:10:43
Que eso no lo hemos hecho, vale 00:10:44
Pero bueno, eso es rapidísimo de hacer 00:10:45
Entonces en este área de aquí 00:10:47
Que le vamos a cambiar el nombre 00:10:49
Que sea personas 00:10:50
Texto personas 00:10:52
Vale, pues entonces 00:10:56
Tendremos que 00:11:02
Texto personas 00:11:05
La vamos a sacar arriba 00:11:12
Para que sea global y así nos ahorramos 00:11:13
Esta se va afuera 00:11:15
Para que sea variable global 00:11:18
y ahora ya 00:11:20
que hacemos aquí con cada persona 00:11:22
leída 00:11:24
pues la incorporamos a un string 00:11:25
entonces ese string 00:11:28
vamos a ponerlo por aquí 00:11:30
inicialmente así 00:11:34
y ahora una vez que tenemos la persona 00:11:38
que concatenamos a este texto 00:11:42
le concatenamos 00:11:44
el nombre 00:11:46
de la persona 00:11:48
con un espacio 00:11:49
nif de la persona 00:11:58
y luego con otro 00:12:01
espacio y luego después le vamos a poner 00:12:05
los teléfonos 00:12:07
como los teléfonos son muchos 00:12:08
tenemos que recorrerlos, entonces vamos a recorrer 00:12:11
los teléfonos 00:12:13
para cada teléfono que tiene 00:12:14
esa persona 00:12:17
dentro de p.get 00:12:18
teléfonos 00:12:21
y ahora esta iteración 00:12:22
esta iteración se va a hacer en el orden alfabético inverso de los teléfonos 00:12:24
pues añadimos a texto 00:12:28
más igual tel más un espacio 00:12:31
y cuando ya hemos terminado de concatenar al texto 00:12:38
el nombre, el NIF, sus teléfonos 00:12:44
vamos a ponerle un salto de línea para el siguiente objeto 00:12:46
le ponemos un salto de línea 00:12:49
y ya está 00:12:54
bueno, pues cuando el bucle de lectura de objetos ha terminado 00:12:56
ya tenemos en texto 00:13:00
todas las personas 00:13:03
tal y como se han leído del archivo de objetos 00:13:04
tal y como se han leído 00:13:07
este bucle 00:13:09
¿dónde acaba? 00:13:10
este bucle acaba 00:13:11
aquí 00:13:12
acaba el bucle 00:13:15
y ahora ya cuando acaba ese bucle 00:13:17
lo que hacemos es 00:13:20
a texto 00:13:21
personas.setText 00:13:23
la forma de hacerlo es con ese error 00:13:27
capturando ese error, no hay un hash next 00:13:28
o algo así 00:13:30
hay un hash 00:13:31
available 00:13:34
creo que hay un hash available 00:13:35
pero 00:13:38
hay un hash available que te dice si todavía tienes 00:13:39
o también podrías hacer, sacarte 00:13:44
pero a mí es que 00:13:46
el hash available, no, hay veces que no me ha funcionado 00:13:48
bien, como esto es lo más genérico 00:13:50
te vale para cualquier archivo 00:13:52
cuando saques fin de archivo, avisa y ya está 00:13:53
Pues me parece más seguro 00:13:56
00:13:58
Entonces 00:14:00
Sextext 00:14:01
Vale, cuando el bucle ha terminado 00:14:03
En el texto persona Sextext 00:14:08
Y cerramos el 00:14:10
Fichero de objetos 00:14:12
Que se llama objetos 00:14:13
Bueno, pues podríamos 00:14:16
Como ya lo hemos serializado 00:14:34
Podríamos ya directamente darle a comprobar 00:14:35
Porque ya lo tenemos de antes 00:14:38
Si le damos a comprobar 00:14:39
Pues perfecto, a la primera 00:14:41
Estos son los objetos 00:14:43
Que se han guardado en el archivo 00:14:45
Y como veis, los teléfonos 00:14:47
Están en alfabético inverso 00:14:51
De mayor a menor 00:14:54
¿Qué pasaría si aquí 00:14:58
Quitáramos esto? 00:15:02
Que ahora estarían en alfabético normal 00:15:05
Porque ahora ya 00:15:08
Tiraría del comparable de string 00:15:10
Si quitamos eso 00:15:11
Sí, porque ha sido en el momento de añadirlos 00:15:15
Entonces, para 00:15:22
Voy a borrar este 00:15:24
A ver, es que hay un problema 00:15:26
Porque el fichero de objetos tiene una cabecera 00:15:32
Entonces, si ya tiene objetos de antes 00:15:34
Y tú le añades objetos nuevos 00:15:35
Te mete una cabecera entre medias 00:15:40
Que lo corrompe 00:15:42
Entonces, para evitar eso 00:15:42
tienes que reescribir la clase 00:15:45
y no quiero meterme en eso ahora 00:15:47
antes del examen, ni siquiera 00:15:49
entonces 00:15:51
vamos a borrar el fichero, cuando hagáis un fichero 00:15:52
de objetos 00:15:56
siempre limpio, nuevo, de cero 00:15:56
no añadáis objetos a uno 00:16:00
que ya tiene de antes porque no va a 00:16:01
funcionar por una cosa que no sabemos 00:16:04
que no hemos visto como arreglar 00:16:05
bueno, es que la necesita 00:16:08
el objeto de impulsión la necesita 00:16:12
para saber que tiene que leer, porque si no sabe 00:16:13
donde parar cada objeto 00:16:15
el problema es que el ojeda output string te mete 00:16:16
la cabecera siempre que lo abres 00:16:19
independientemente de que el fichero tenga cosas o no 00:16:21
entonces por eso hay que hacer una cosa 00:16:23
¿vale? 00:16:25
ahora mismo nos quedamos con que si trabajáis con ficheros 00:16:27
de objetos, porque vais a crear un fichero de objetos 00:16:29
siempre un fichero nuevo 00:16:31
limpio 00:16:33
por supuesto 00:16:34
en el trabajo no vais a trabajar con esto 00:16:39
Pero si vais a tener que tener la cabeza fresca 00:16:42
Como la estáis moviendo ahora 00:16:45
A ver, vamos a seleccionar el CSV otra vez 00:16:46
Entra dentro 00:16:56
Serializado 00:17:02
Y ahora vamos a comprobarlo 00:17:07
Es que no lo confundas con el DNI 00:17:10
ahora lo ha hecho 00:17:13
al revés 00:17:15
las maravillas del triset que realmente 00:17:16
simplemente por usarlo 00:17:19
ya tienes listados ordenados 00:17:21
no tienes que 00:17:23
por ejemplo hay veces que tienes que ordenar 00:17:25
y me lo hago en una lista, llamo a sort 00:17:27
¿para qué? lo hago en un triset 00:17:29
y él ya lo va a hacer 00:17:31
ala, pues ya está 00:17:33
entonces ahora ya uno puede decir, vale, mi fichero 00:17:36
de objetos está creado correctamente y ya se lo pasas 00:17:39
a quien sea, le dices, ya no lo tienes 00:17:41
en CSV, lo tienes en objetos 00:17:43
y en la otra aplicación que haga lo que sea. 00:17:44
Aquí vamos a incorporar simplemente 00:17:47
que cuando le damos a seleccionar 00:17:49
CSV, nos lee 00:17:51
aquí el contenido y nos lo muestre. 00:17:53
Entonces este evento de 00:17:55
seleccionar 00:17:57
CSV de aquí 00:17:58
le vamos a agregar una cosita 00:18:01
y es una vez que tenemos 00:18:02
el fichero este de aquí 00:18:08
lo vamos a abrir 00:18:11
para leer 00:18:14
Fitch CSV 00:18:15
lo abrimos para leer 00:18:27
hacemos el try-catch 00:18:31
y ahora 00:18:33
aquí dentro para no 00:18:35
hacemos el bucle 00:18:37
de lectura, pegamos en área de texto y se acabó 00:18:39
y ahora 00:18:42
hacemos el bucle de lectura de caracteres normal y corriente 00:18:50
mientras que n siendo 00:18:52
n quien? el resultado de 00:19:02
haber leído de aquí 00:19:04
este sea 00:19:05
diferente de 00:19:08
menos uno 00:19:09
pues mientras sea diferente de menos uno 00:19:11
¿qué vas a hacer? 00:19:14
concatenarlo a 00:19:17
texto 00:19:18
añadimos la excepción 00:19:20
bueno, pues cuando ya hemos terminado 00:19:28
este bucle de lectura de caracteres normal y corriente 00:19:34
ya texto 00:19:36
tiene todo el contenido del CSV 00:19:37
todo lo que tenga, pues se lo ponemos 00:19:39
a esta, que esta se llama 00:19:42
textarea a secas, la vamos a subir para arriba 00:19:46
pues ahora, este evento que estaba 00:19:49
aquí arriba, textarea.sec 00:20:09
test, texto 00:20:15
y cerramos el, un segundo, y cerramos este 00:20:17
y ya está, ¿cómo? 00:20:23
punto append 00:20:27
pero es que no quiero añadirlo 00:20:32
quiero el contenido del fichero 00:20:35
ponerlo ahí, lo que tuviera de antes 00:20:36
es que luego lo que tenía de antes igual era otro 00:20:38
el punto append te añade a lo que ya haya 00:20:40
de antes 00:20:45
entonces yo quiero que el fichero que hubiera de antes 00:20:45
lo quite entero 00:20:49
vamos a ver si con esto 00:20:49
la tenemos ya chula 00:20:53
Aquí está el CSV con sus puntos y comas 00:20:56
Con todo 00:21:05
Como no le he dado a añadir 00:21:06
Igual esto sí que me lo hace 00:21:10
Porque no le he puesto en el file output 00:21:11
Si no le he puesto a añadir 00:21:13
Entonces me borra y lo hace de nuevo 00:21:14
Sí que yo no he borrado el archivo 00:21:15
Pero claro, cuando lo he creado 00:21:20
Con object output string aquí 00:21:21
Claro 00:21:23
Recordad que file output string 00:21:25
Si no le pones un segundo parámetro 00:21:27
Te borra el que hubiera 00:21:29
El problema es si tú pones esto 00:21:30
eso es lo que ya no funciona 00:21:33
porque hay que añadir 00:21:35
bueno pues ya funciona 00:21:36
y muy bien 00:21:40
fall elimina lo que hubiera 00:21:40
y te lo hace de nuevas 00:21:44
con lo cual no tenemos que borrar la mano 00:21:45
vale 00:21:46
bueno pues ya está hemos repasado 00:21:49
triset, leer objetos 00:21:56
escribir objetos, leer de texto 00:21:57
y programar 00:21:59
lo que viene siendo programar un poquito 00:22:02
que por lo menos durante 4 o 5 años más 00:22:04
tendréis que hacerlo 00:22:06
a ver, en 4 o 5 00:22:07
a ver, no os quejéis 00:22:11
vosotros todavía, tenéis un tiempecito 00:22:12
para meteros en el mundo de ser 00:22:15
programadores y aprovechar para 00:22:16
reconvertiros 00:22:18
los que acaben en 5 años, ya nada 00:22:19
es que para, sí 00:22:22
porque este va a ser tu punto de partida 00:22:26
meterte en este mundo 00:22:28
sin ni siquiera saber programar 00:22:31
ya sí que no 00:22:32
como punto de partida 00:22:33
todavía esto sigue estando bien 00:22:36
pero, a ver, también es cierto que es que yo soy muy 00:22:37
muy escéptica 00:22:40
o sea, muy pesimista 00:22:43
en todo esto 00:22:44
que mucha gente dice 00:22:45
no, no, si programar va a haber que saber programar siempre 00:22:47
yo no lo veo tan claro 00:22:50
pero bueno 00:22:52
vale, pues a ver 00:22:54
duda 00:22:56
Materias:
Programación
Niveles educativos:
▼ Mostrar / ocultar niveles
  • Formación Profesional
    • Ciclo formativo de grado superior
      • Primer Curso
Subido por:
Raquel G.
Licencia:
Todos los derechos reservados
Visualizaciones:
8
Fecha:
7 de mayo de 2025 - 19:34
Visibilidad:
Clave
Centro:
IES ROSA CHACEL
Duración:
22′ 59″
Relación de aspecto:
1.78:1
Resolución:
1920x1080 píxeles
Tamaño:
114.73 MBytes

Del mismo autor…

Ver más del mismo autor


EducaMadrid, Plataforma Educativa de la Comunidad de Madrid

Plataforma Educativa EducaMadrid