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 returned.

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 command.

    #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 %s, argv[1]);
            return EXIT_FAILURE;
        }

        printf("%-32s%-16s%-16s%-16sn", "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("%-16s, 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)