20250505 EjerFichCSV_3 - Contenido educativo
Ajuste de pantallaEl ajuste de pantalla se aprecia al ver el vídeo en pantalla completa. Elige la presentación que más te guste:
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
p
00:09:28
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
el
00:11:53
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
Sí
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