2010-10-26 17 views
13

Tengo una estructura grande en un archivo MAT. Quiero comprobar si un campo específico está presente en la estructura sin cargando el archivo MAT porque el contenido es muy grande y quiero minimizar el uso de la memoria.¿Cómo puedo verificar el contenido de un archivo MAT en MATLAB sin cargarlo?

Es esto posible, o tengo que cargarlo primero como en el ejemplo siguiente ?:

load('test.mat');    %# Load the MAT-file 
tf = isfield(s,'fieldname'); %# Check if structure s has field 'fieldname' 

Respuesta

22

para comprobar el contenido de un archivo MAT sin cargarla, utilice:

vars = whos('-file','test.mat') 
ismember('fieldname', {vars.name}) 
+0

funciona eso para los campos de las estructuras internas 'test.mat'? – Jonas

+0

@Jonas: el código anterior solo busca nombres de variables. Entonces, como mencionó en su respuesta, el usuario debe usar la opción '-struct' de SAVE para dividir los campos de la estructura en variables separadas al guardar en un archivo MAT. – Amro

+2

@Jonas: si el usuario está realmente preocupado por el uso de la memoria, simplemente podemos escribir los nombres de campo en un archivo de texto separado junto con el archivo MAT real, luego cargar y verificar el archivo de texto según sea necesario antes de cargar la estructura real data – Amro

6

Por lo que sé, tiene que cargar el archivo con el fin de poder comprobar si un salvado la estructura contiene un campo específico.

Sin embargo, si guarda el archivo .mat con el '-struct'-option, divide los campos en variables separadas en el archivo .mat. Puede volver a crear la estructura llamando

myStructure = load('test.mat'); 

ahorro de esta manera también permite comprobar si un campo de (variable) existe por el uso de @Amro 's enfoque (que es mucho más limpio que lo que he sugerido antes).

Cuestiones relacionadas