Matlab - Como leer todo el contenido de un fichero y extraer la información

 
Vista:
sin imagen de perfil
Val: 23
Ha aumentado su posición en 4 puestos en Matlab (en relación al último mes)
Gráfica de Matlab

Como leer todo el contenido de un fichero y extraer la información

Publicado por Alejandro Cruz (17 intervenciones) el 21/03/2019 11:27:30
Hola,
Tengo una duda sobre la lectura del contenido de un fichero. Uso estructuras para sacar la información que necesito del fichero.
El código en Matlab que tengo es el siguiente:

FileList = dir (‘fichero.json’)
File = FileList.name;
Array = jsondecode(fileread(File));
% A continuación saco los campos que necesito del fichero que leo
NombreFichero = array.imagename
Columna = array.children.maxcol
% y así con todos los campos que necesito

La cosa es que hay varias estructuras dentro del mismo “fichero.json” y sólo el código que tengo me lee la primera y me deja sin leer el resto y el fichero no termina ahí.
¿Cómo puedo solucionar el problema para que me lea todo el fichero y me pueda sacar toda la información del fichero?
Muchas gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 23
Ha aumentado su posición en 4 puestos en Matlab (en relación al último mes)
Gráfica de Matlab

Como leer todo el contenido de un fichero y extraer la información

Publicado por Alejandro (17 intervenciones) el 21/03/2019 11:49:04
Hola Daniel, muchas gracias por el artículo. En dicho artículo aparece un ejemplo bastante claro, como el que yo tengo, pero en el que solo lee el primer elemento del array, que es lo que hace mi programa y lo que necesito es que me lea todos los elementos del array y eso es lo que no se cómo hacerlo.
Muchas gracias,
Alejandro
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 918
Bronce
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Como leer todo el contenido de un fichero y extraer la información

Publicado por Daniel (354 intervenciones) el 21/03/2019 11:57:03
Hola Alejandro,

Entiendo que este puede ser el problema

1
value = jsondecode('[{"a":0},{"a":1}]')

dos o más objetos iguales en el JSON. Es tan fácil como

1
2
3
4
5
6
7
8
9
10
11
>> value(1).a
 
ans =
 
     0
 
>> value(2).a
 
ans =
 
     1

El problema puede ser que hagas esto:

1
2
3
4
5
>> resultado = value.a
 
resultado =
 
     0

Así solo se carga el primer elemento. ¿Era este el problema?

Saludos,
Daniel Rodríguez.
Analytics Lane
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 23
Ha aumentado su posición en 4 puestos en Matlab (en relación al último mes)
Gráfica de Matlab

Como leer todo el contenido de un fichero y extraer la información

Publicado por Alejandro (17 intervenciones) el 21/03/2019 12:11:04
Hola Daniel,
Si pinchas en el enlace que me has pasado verás que en el ejemplo que aparece solo muestra el primer elemento del array pero no muestra todos los elementos del array. Lo que necesito es que me muestre todos.
El enlace que me has pasado es la misma situación que la que tengo yo y el código que he puesto al principio es lo que tengo en mi programa.
Un saludo,
Alejandro
image
image


En las imágenes que te he pasado como podrás ver, la primera es de mi programa, la segunda es la ejecución y la tercera es el fichero que tengo que leer. Como podrás darte cuenta solo me lee el primer elemento del array y el resto de elementos no lo lee.
image
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 918
Bronce
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Como leer todo el contenido de un fichero y extraer la información

Publicado por Daniel (354 intervenciones) el 21/03/2019 12:34:55
Hola Alejandro,

El problema esta en los vectores, si son objetos iguales los carga como un array que hay que iterar.

1
2
3
4
5
value = jsondecode('{"children":[{"a":0},{"a":1}]}');
 
for i = 1:length(value.children)
    value.children(i).a
end

¿Cómo puedes saber que este es el caso? Hay que verificar que el objeto es un struct y su longitud es mayor que uno. Si es un valor será una cadena de texto, un número o un vector de estos.

1
isstruct(value.children) && length(value.children) > 1

Ojo, sin no son iguales será una celda, que también habrá que iterar:

1
2
3
4
5
6
7
8
9
10
value = jsondecode('{"children":[{"a":0},{"b":1}]}');
 
for i = 1:length(value.children)
    names = fieldnames(value.children{i});
 
    for j = 1:length(names)
       sub = value.children{i}.(names{j});
       fprintf('Clave: %s, valor: %d\n', names{j}, sub);
    end
end

Saludos,
Daniel Rodríguez.
Analytics Lane
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 23
Ha aumentado su posición en 4 puestos en Matlab (en relación al último mes)
Gráfica de Matlab

Como leer todo el contenido de un fichero y extraer la información

Publicado por Alejandro (17 intervenciones) el 21/03/2019 13:06:07
Muchas gracias Daniel, lo he probado y me ha funcionado.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar