2010-10-26 6 views
13

J'ai une grande structure dans un fichier MAT. Je veux vérifier si un champ spécifique est présent dans la structure sans en chargeant le fichier MAT puisque le contenu est très grand et je veux minimiser l'utilisation de la mémoire.Comment puis-je vérifier le contenu d'un fichier MAT dans MATLAB sans le charger?

Est-ce possible, ou dois-je charger d'abord comme dans l'exemple suivant ?:

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

Répondre

22

Pour vérifier le contenu d'un fichier MAT sans le charger, utilisez:

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

Est-ce que le travail pour les champs de structures à l'intérieur de 'test.mat'? – Jonas

+0

@Jonas: Le code ci-dessus ne vérifie que les noms de variables. Ainsi, comme vous l'avez mentionné dans votre réponse, l'utilisateur doit utiliser l'option '-struct' de SAVE pour diviser les champs de structure en variables distinctes lors de l'enregistrement dans un fichier MAT. – Amro

+2

@Jonas: sinon, et si l'utilisateur est vraiment préoccupé par l'utilisation de la mémoire, nous pouvons simplement écrire les noms de champs dans un fichier texte séparé avec le fichier MAT actuel, puis charger et vérifier le fichier texte avant de charger la structure réelle – Amro

6

Pour autant que je sais, vous devez charger le fichier afin de pouvoir vérifier si un sauvé structure contient un champ spécifique. Toutefois, si vous enregistrez le fichier .mat avec '-struct'-option, il divise les champs en variables distinctes dans le fichier .mat. Vous pouvez recréer la structure en appelant

myStructure = load('test.mat'); 

Saving cette façon vous permet également de tester pour savoir si un champ (variable) existe en utilisant l'approche de @Amro (ce qui est beaucoup plus propre que ce que je l'ai suggéré).

Questions connexes