Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.

Escribir en archivo asignado

En este ejemplo se muestra cómo crear tres mapas de memoria diferentes y, a continuación, escribir en cada uno de los mapas utilizando la sintaxis adecuada. A continuación, se muestra cómo trabajar con copias de los datos asignados.

Puede escribir en un archivo con los mismos comandos que utiliza para acceder a las variables del espacio de trabajo.MATLAB®MATLAB Al acceder a la propiedad del mapa de memoria, el contenido del archivo asignado aparece como una matriz en el espacio de trabajo activo actualmente.Datos Simplemente indexar en esta matriz para escribir datos en el archivo. La sintaxis que se usa al escribir en la memoria asignada depende del formato de la propiedad del mapa de memoria.Datos

Escribir en memoria asignada como matriz numérica

En primer lugar, cree un archivo de ejemplo con nombre, en la carpeta actual.records.dat

myData = gallery('uniformdata', [5000,1], 0);  fileID = fopen('records.dat','w'); fwrite(fileID, myData,'double'); fclose(fileID);

Asigne el archivo como una secuencia de enteros de 16 bits sin signo. Utilice el argumento de par nombre-valor para especificar que los valores son de tipo.Formatuint16

m = memmapfile('records.dat', ...             'Offset',20,            ...       'Format','uint16',      ...       'Repeat',15);

Dado que el archivo se asigna como una secuencia de una sola clase (), es una matriz numérica.uint16Datos

Asegúrese de que tiene permiso de escritura en el archivo asignado. Establezca la propiedad del mapa de memoria, a.Writablemtrue

m.Writable = true;

Cree una matriz que tenga el mismo tamaño que la propiedad y escríbelo en la parte asignada del archivo.XDatos Todas las reglas habituales de indexación y clase de MATLAB se aplican al asignar valores a los datos a través de un mapa de memoria. La clase a la que asigne debe ser lo suficientemente grande como para contener el valor asignado.

X = uint16(1:1:15); m.Data = X;

es un vector de 1 por 15 de valores enteros que van de 1 a 15.X

Compruebe que se han escrito nuevos valores en el archivo. Especifique un valor de 0 para comenzar a leer desde el principio del archivo.Offset Especifique un valor de 35 para ver un total de 35 valores.Repeat Utilice la función para mostrar los valores como una matriz de 7 por 5.reshape

m.Offset = 0; m.Repeat = 35; reshape(m.Data,5,7)'
ans = 7x5 uint16 matrix

   47662   34773   26485   16366   58664
   25170   38386   16333   14934    9028
       1       2       3       4       5
       6       7       8       9      10
      11      12      13      14      15
   10085   14020   16349   37120   31342
   62110   16274    9357   44395   18679

Los valores en se han escrito en el archivo,.Xrecords.dat

Escribir en memoria asignada como estructura escalar

Asigne una región del archivo, como una matriz de tipo 300 por 8 a la que se puede hacer referencia mediante el nombre del campo, seguida de una matriz de tipo 200-by-5 que puede ser referencia por el nombre del campo,.records.datuint16xdoubley Especifique el permiso de escritura en el archivo asignado mediante el argumento de par nombre-valor.Writable

m = memmapfile('records.dat',     ...       'Format', {                 ...          'uint16' [300 8] 'x';    ...          'double' [200 5] 'y' },  ...       'Repeat', 1, 'Writable', true);

El establecimientoDatos

m.Data
ans = struct with fields:
    x: [300x8 uint16]
    y: [200x5 double]

es una matriz de estructura escalar.Datos Esto se debe a que el archivo,, se asigna como que contiene varios tipos de datos que no se repiten.records.dat

Reemplace la matriz en el campo, con una matriz de todos los.x

 m.Data.x = ones(300,8,'uint16');

Escribir en memoria asignada como estructura no escalar

Asigne el archivo, como una matriz de 25 por 8 de tipo seguido de una matriz de tipo 15 por 5.records.datuint16double Repite el patrón 20 veces.

 m = memmapfile('records.dat',    ...       'Format', {                ...          'uint16' [5 4] 'x';    ...          'double' [15 5] 'y' },  ...       'Repeat', 20, 'Writable', true);

El establecimientoDatos

m.Data
ans = 20x1 struct array with fields:
    x
    y

es una matriz de estructura no escalar, porque el archivo se asigna como una secuencia repetida de varios tipos de datos.Datos

Escribe una matriz de todos los elementos en el campo llamado en el elemento 12 de.xDatos

  m.Data(12).x = ones(5,4,'uint16');

Para el elemento 12 de, escriba el valor, 50, a todos los elementos de las filas 3 a 5 del campo,.Datosx

  m.Data(12).x(3:5,1:end) = 50;

Ver el campo,, del elemento 12 de.xDatos

  m.Data(12).x
ans = 5x4 uint16 matrix

    1    1    1    1
    1    1    1    1
   50   50   50   50
   50   50   50   50
   50   50   50   50

Sintaxis para escribir en archivo asignado

La sintaxis que se usa al escribir en la memoria asignada depende del formato de la propiedad del mapa de memoria.Datos Para ver las propiedades del mapa de memoria, escriba el nombre del objeto.memmapfile

Esta tabla muestra las sintaxis para escribir una matriz, en un mapa de memoria,.Xm

El formato de la propiedadDatosSintaxis para escribir en archivo asignado

Matriz numérica

Example:15x1 uint16 array

m.Data = X; 

La matriz de estructura escalar (1 por 1)

Example:

1x1 struct array with fields:                 x                 y

m.Data.fieldname = X;

fieldname es el nombre de un campo.

Matriz de estructura no escalar (-por-1)n

Example:

20x1 struct array with fields:                 x                 y

m.Data(k).fieldname = X;

es un índice escalar yk fieldname es el nombre de un campo.

La clase y el número de elementos en deben coincidir con los de la propiedad o el campo de la propiedad que se tiene acceso.XXDatosDatos No puede cambiar las dimensiones de la propiedad después de haber creado el mapa de memoria mediante la función.Datosmemmapfile Por ejemplo, no puede disminuir o expandir el tamaño de una matriz quitando o agregando una fila de la matriz asignada,.m.Data

Si asigna un archivo completo y, a continuación, se anexa a ese archivo después de construir el mapa, los datos anexados no se incluirán en la región asignada. Si necesita modificar las dimensiones de los datos que ha asignado a un mapa de memoria, debe modificar las propiedades o volver a crear con la función.mFormatRepeatmmmemmapfile

Nota

Para modificar correctamente un archivo asignado, debe tener permiso de escritura para ese archivo. Si no tiene permiso de escritura, intentar escribir en el archivo genera un error, incluso si la propiedad es.Writabletrue

Trabajar con copias de sus datos asignados

Esta parte del ejemplo muestra cómo trabajar con copias de los datos asignados. Los datos en variable son una copia de los datos de archivo asignados por.dm.Data(2) Dado que se trata de una copia, la modificación de los datos de la matriz no modifica los datos contenidos en el archivo.d

Cree un archivo de ejemplo con nombre.double.dat

myData = gallery('uniformdata',[5000,1],0) * 100; fileID = fopen('double.dat','w'); fwrite(fileID,myData,'double');  fclose(fileID);

Asigne el archivo como una serie de matrices.double

m = memmapfile('double.dat',    ...       'Format', {               ...           'double' [5 5] 'x';    ...          'double' [4 5] 'y' });

Ver los valores en.m.Data(2).x

m.Data(2).x
ans = 5×5

   50.2813   19.3431   69.7898   49.6552   66.0228
   70.9471   68.2223   37.8373   89.9769   34.1971
   42.8892   30.2764   86.0012   82.1629   28.9726
   30.4617   54.1674   85.3655   64.4910   34.1194
   18.9654   15.0873   59.3563   81.7974   53.4079

Copie el contenido de la variable,.m.Datad

d = m.Data;

Escriba todos los ceros en el campo denominado en la copia.x

d(2).x(1:5,1:5) = 0;

Compruebe que los ceros se escriben end(2).x

d(2).x
ans = 5×5

     0     0     0     0     0
     0     0     0     0     0
     0     0     0     0     0
     0     0     0     0     0
     0     0     0     0     0

Compruebe que no se modifican los datos del archivo asignado.

m.Data(2).x
ans = 5×5

   50.2813   19.3431   69.7898   49.6552   66.0228
   70.9471   68.2223   37.8373   89.9769   34.1971
   42.8892   30.2764   86.0012   82.1629   28.9726
   30.4617   54.1674   85.3655   64.4910   34.1194
   18.9654   15.0873   59.3563   81.7974   53.4079

Consulte también

Temas relacionados