主要内容

写入映射文件

这个示例展示了如何创建三个不同的内存映射,然后使用适当的语法对每个映射进行写入。然后,介绍如何处理映射数据的副本。

您可以使用相同的MATLAB写入文件®用于访问MATLAB工作空间中的变量的命令。通过访问数据属性时,映射文件的内容将以数组的形式显示在当前活动工作区中。只需在这个数组中建立索引,将数据写入文件。写入映射内存时使用的语法取决于数据内存映射的属性。

写入内存映射为数字数组

首先,创建一个名为records.dat,在当前文件夹中。

rng (“默认”) myData = rand([50001]);文件标识= fopen (“records.dat”' w ');写入文件(文件标识,myData,“双”);文件关闭(文件标识);

将文件映射为一个16位无符号整数序列。使用格式名称-值对参数,以指定值的类型uint16

m = memmapfile (“records.dat”...“抵消”, 20岁,...“格式”“uint16”...“重复”15);

因为该文件被映射为单个类的序列(uint16),数据是一个数字数组。

请确保您对映射文件具有写权限。设置可写的内存映射的属性,,真正的

m.Writable = true;

创建一个矩阵X这和数据属性,并将其写入文件的映射部分。当通过内存映射给数据赋值时,所有常用的MATLAB索引和类规则都适用。您赋值的类必须足够大,以容纳被赋值的值。

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

X是一个1 × 15的整数向量,取值范围为1到15。

验证新值是否已写入文件。指定一个抵消值0表示从文件的开头开始读取。指定一个重复值35查看总共35个值。使用重塑函数以7 × 5矩阵的形式显示值。

m.Offset = 0;m.Repeat = 35;重塑(m.Data、5、7)
ans =7 x5 uint16矩阵47739 26762 4663 16362 3197 24407 64575 16364 31612 40832 12 3 45 67 8 9 10 11 12 13 14 15 12673 53994

中的值X都写进了档案records.dat

写入内存映射为标量结构

映射文件的区域,records.dat,作为一个300 × 8的矩阵类型uint16可以通过字段名引用,x,后面是一个200 × 5的矩阵可以通过字段名引用,y.属性指定映射文件的写权限可写的名称-值对的论点。

m = memmapfile (“records.dat”...“格式”, {...“uint16”(300 8)“x”...“双”200年[5]“y”},...“重复”, 1可写的,真正的);

查看数据财产

m.Data
ans =结构体字段:X: [300x8 uint16] y: [200x5 double]

数据是标量结构数组。这是因为这个文件,records.dat,映射为包含多个不重复的数据类型。

替换字段中的矩阵,x,它的矩阵都是1。

m.Data.x = 1(300年8“uint16”);

写入内存映射为非标量结构

地图文件,records.dat,作为一个25 × 8的矩阵类型uint16后面是一个15乘5的矩阵.重复这个模式20次。

m = memmapfile (“records.dat”...“格式”, {...“uint16”(5 - 4)“x”...“双”[15 5]“y”},...“重复”, 20岁,可写的,真正的);

查看数据财产

m.Data
ans =20×1带有字段的结构数组:x y

数据是一个非标量结构数组,因为该文件被映射为多个数据类型的重复序列。

将所有1的数组写入名为的字段x在第12个元素中数据

m.Data(12)方式= ones(5,4,“uint16”);

的第12个元素数据,将值50写入该字段第3至第5行中的所有元素,x

m.Data(12)方式(3:5,1:结束)= 50;

视图,x的第12个元素数据

m.Data(12)方式
ans =5 x4 uint16矩阵1 1 1 1 1 1 1 1 1 1 1 1

写入映射文件的语法

写入映射内存时使用的语法取决于数据内存映射的属性。的名称可以查看内存映射的属性memmapfile对象。

这个表显示了写矩阵的语法,X,到内存映射,

的格式数据财产 写入映射文件的语法

数字数组

例子:15 x1 uint16数组

m.Data = X;

标量(1乘1)结构数组

例子:

1x1 struct array with fields: x y

m.Data。字段名= X;

字段名字段的名称。

Nonscalar (n1)结构数组

例子:

struct array with fields: x y

m.Data (k)。字段名= X;

k是标量指标和字段名字段的名称。

的类X和元素的个数X必须与那些数据属性或领域数据属性被访问。你不能改变数据属性创建内存映射后memmapfile函数。例如,不能通过从映射数组中删除或添加一行来减少或扩展数组的大小,m.Data

如果映射整个文件,然后在构造映射后追加到该文件,则所追加的数据不包括在映射区域中。如果您需要修改已映射到内存映射的数据的维度,,则必须修改格式重复属性或重新创建使用memmapfile函数。

请注意

要成功修改映射文件,您必须对该文件具有写权限。如果您没有写权限,尝试写入文件将产生错误,即使可写的属性是真正的

处理映射数据的副本

示例的这一部分展示了如何处理映射数据的副本。变量中的数据d是否由映射的文件数据副本m.Data (2).因为它是一个复制,修改数组数据d不修改文件中包含的数据。

创建一个名为double.dat

myData =兰德([1]5000年)* 100;文件标识= fopen (“double.dat”' w ');写入文件(文件标识,myData,“双”);文件关闭(文件标识);

将文件映射为一系列矩阵。

m = memmapfile (“double.dat”...“格式”, {...“双”5 [5]“x”...“双”5 [4]“y”});

查看m.Data(2)方式

m.Data(2)方式
ans =5×595.0545 54.7696 15.6697 97.2605 85.0706 53.2131 60.9054 5.8124 60.5319 25.6792 24.7686 86.3135 33.9707 33.8236 28.5496 43.7276 38.0696 81.7176 92.7984 77.9947 66.9088 74.8956 37.7548 89.8425 70.1395

复制m.Data的变量,d

d = m.Data;

将所有零写入指定的字段x在复制。

d(2)方式(1:5,1:5)= 0;

验证是否写入了零d(2)方式

d(2)方式
ans =5×50 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

验证映射文件中的数据没有被更改。

m.Data(2)方式
ans =5×595.0545 54.7696 15.6697 97.2605 85.0706 53.2131 60.9054 5.8124 60.5319 25.6792 24.7686 86.3135 33.9707 33.8236 28.5496 43.7276 38.0696 81.7176 92.7984 77.9947 66.9088 74.8956 37.7548 89.8425 70.1395

另请参阅

相关的话题