Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
MAT_VARREADNEXTINFO(3)	    Library Functions Manual	MAT_VARREADNEXTINFO(3)

NAME
       Mat_VarReadNextInfo -- Reads the	information for	the next variable in a
       MATLAB MAT file.

SYNOPSIS
       #include	<matio.h>

       matvar_t	*
       Mat_VarReadNextInfo(mat_t *matfp);

DESCRIPTION
       The  Mat_VarReadNextInfo()  function reads the information for the next
       variable	stored in the open MAT file.

RETURN VALUES
       If there	is another variable in the MAT file and	is read	 successfully,
       a pointer to the	MATLAB variable	structure is returned. If there	are no
       more variables, or there	was an error reading the variable, NULL	is re-
       turned.

EXAMPLES
       This  example  program  opens a MAT file	named by the first argument to
       the program, and	uses Mat_VarReadNextInfo()  to	read  the  information
       about  each  variable  in  the file.  For each variable read, the name,
       size, and class are printed in a	format similar to the MATLAB whos com-
       mand.

       #include	<math.h>
       #include	<stdlib.h>
       #include	<stdio.h>
       #include	"matio.h"

       static char *mxclass[17]	= {"cell", "struct", "object", "char", "sparse",
				   "double", "single", "int8", "uint8",	"int16",
				   "uint16", "int32", "uint32",	"int64", "uint64",
				   "function", "opaque"
				  };

       int
       main(int	argc, char **argv)
       {
	   mat_t *matfp;
	   matvar_t *matvar;
	   char	size[32] = {' ',};

	   matfp = Mat_Open(argv[1], MAT_ACC_RDONLY);
	   if (	NULL ==	matfp )	{
	       fprintf(stderr, "Error opening MAT file %s0, argv[1]);
	       return EXIT_FAILURE;
	   }

	   printf("%-32s%-16s%-16s%-16s0, "Name", "Size", "Bytes", "Class");
	   while ( NULL	!= (matvar = Mat_VarReadNextInfo(matfp)) ) {
	       printf("%-32s", matvar->name);
	       if ( matvar->rank > 0 ) {
		   int cnt;
		   int i;
		   cnt = snprintf(size,	sizeof(size), "%zd", matvar->dims[0]);
		   for ( i = 1;	i < matvar->rank; i++ )	{
		       if ( ceil(log10((double)matvar->dims[i])) + 1 < 32 ) {
			   cnt += snprintf(size	+ cnt, sizeof(size) - cnt,
			       "x%zd", matvar->dims[i]);
			   if (	cnt >= sizeof(size) ) {
			       break;
			   }
		       }
		   }
		   printf("%-16s", size);
	       } else {
		   printf("		   ");
	       }
	       snprintf(size, sizeof(size), "%zd", Mat_VarGetSize(matvar));
	       printf("%-16s", size);
	       printf("%-16s0, mxclass[matvar->class_type - 1]);

	       Mat_VarFree(matvar);
	   }

	   Mat_Close(matfp);
	   return EXIT_SUCCESS;
       }

SEE ALSO
       Mat_VarRead(3), Mat_VarReadInfo(3), Mat_VarReadNext(3)

FreeBSD	Ports 14.quarterly	 March 4, 2024		MAT_VARREADNEXTINFO(3)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=Mat_VarReadNextInfo&sektion=3&manpath=FreeBSD+Ports+14.3.quarterly>

home | help