主要内容

使用低级I/O导入二进制数据

用于导入数据的低级函数

低级文件I/O功能允许最直接的控制读取或将数据写入文件。但是,这些函数要求您指定关于您的文件的更多详细信息,而不是更容易使用高级功能.有关他们支持的最高级别函数的完整列表和他们支持的文件格式,请参阅万博1manbetx万博1manbetx支持的文件格式的导入和导出

如果高级函数无法导入数据,请使用以下之一:

  • fscanf,它以文本或ASCII文件读取格式化数据;也就是说,您可以在文本编辑器中查看的文件。有关更多信息,请参见以格式化模式读取数据

  • fgetl函数可以,它一次读取一行文件,其中换行符分隔每行。有关更多信息,请参见逐行读取数据

  • 吓唬,它在字节或位级别读取数据流。有关更多信息,请参见在文件中读取二进制数据

请注意

低级文件I / O功能基于ANSI中的函数®标准C库。然而,MATLAB®包括矢量化版本的函数,以最小的控制循环读写数组中的数据。

在文件中读取二进制数据

与任何低级I / O函数一样,在导入之前,打开文件打开外部文件,获取文件标识符。当您完成一个文件的处理时,用文件关闭fileid.

默认情况下,吓唬每次读取一个文件1个字节,并将每个字节解释为8位无符号整数(uint8).吓唬创建列向量,文件中的每个字节都有一个元素。列向量中的值属于类双倍的

例如,考虑这个文件,创建如下:

fid = fopen (' nine.bin ', ' w ');写入文件(fid, [1:9]);文件关闭(fid);

将文件中的所有数据读入到一个类的9×1列向量双倍的

fid = fopen(“nine.bin”);col9 =从文件中读(fid);文件关闭(fid);

更改数组的尺寸

默认情况下,吓唬将文件中的所有值读入列向量。但是,您可以指定要读取的值的数量,或者描述一个二维输出矩阵。

例如,阅读,在前面的示例中描述:

fid = fopen(“nine.bin”);%只读第一个六个值Col6 = fread(fid,6);%返回文件Frewwind(FID)的开头;%读取前四个值进入2×2矩阵Frewind(FID);两个_dim4 = fread(fid,[2,2]);%读成具有3行和%未指定的列Frewind(FID)的%未指定数量的矩阵;两个_dim9 = fread(fid,[3,inf]);%关闭文件fclose(fid);

描述输入值

如果文件中的值不是8位无符号整数,请指定值的大小。

例如,考虑这个文件fpoint.bin,用双精度值创建如下:

[圆周率,42,1 /3];fid = fopen (' fpoint.bin ', ' w ');写入文件(fid, myvals,“双”);文件关闭(fid);

要读取文件:

FID = fopen('fpoint.bin');%读取,旋转SO SEAVALS = MYVALS = MYVALS = FREAD(FID,'双')';文件关闭(fid);

有关精度描述的完整列表,请参见吓唬函数引用页面。

保存内存

默认情况下,吓唬创建类的数组双倍的.在数组中存储双精度值比存储字符、整数或单精度值需要更多的内存。

为了减少存储数据所需的内存量,使用以下方法之一指定数组的类:

  • 将输入值的类与星号匹配('*').例如,将单精度值读入类的数组,使用命令:

    mydata.=从文件中读(支撑材,'*单身的')
  • 将输入值映射到新类' = > '的象征。例如,阅读uint8值到一个uint16数组,使用命令:

    mydata.=从文件中读(支撑材,'uint8 => uint16')

有关精度描述的完整列表,请参见吓唬函数引用页面。

读取文件的部分

MATLAB低级函数包括用于在文件中读取二进制数据的部分的多个选项:

测试文件结束

打开文件时,MATLAB会创建指针以指示文件中的当前位置。

请注意

打开一个空文件就可以了将文件位置指示灯移动到文件的末尾。读取操作,和fseekfrewind函数,移动文件位置指示器。

使用feof函数检查您是否已到达文件的末尾。feof返回值为1当文件指针位于文件末尾时。否则,它将返回0

例如,读取一个大文件的部分:

filename ='larledata.dat';%假设文件segsize = 10000;fid = fopen(文件名);〜〜Feof(FID)Currdata = Fread(FID,SEGSize);如果〜isempty(currdata)disp('当前数据:');DISP(CURRDATA);结束末端FCLOSE(FID);

搬入文件

要读取或写入所选数据部分,将文件位置指示灯移动到文件中的任何位置。例如,呼叫fseek用语法

fseek (支撑材抵消起源);

地点:

  • 支撑材是从中获得的文件标识符打开外部文件

  • 抵消以字节为单位指定的正或负偏移值。

  • 起源指定要计算位置的位置:

    “转炉”

    开头的文件

    “咖啡”

    文件中的当前位置

    eof的

    文件结束

或者,方便地移动到文件的开头:

frewind (支撑材);

ftell查找给定文件中的当前位置。ftell返回从文件开头开始的字节数。

例如,创建一个文件five.bin

a = 1:5;FID = FOPEN('FIVE.BIN','W');fwrite(fid,a,'short');文件关闭(fid);

因为召唤FWRITE.指定了格式,每个元素一个使用两个存储字节five.bin

重开five.bin阅读:

fid = fopen(‘five.bin’,‘r’);

将文件位置指示器从文件开头向前移动6个字节:

状态= fseek(支撑材6“转炉”);

阅读下一个元素:

4 =从文件中读(fid, 1,“短”);

阅读的行为使文件位置指示器推进。确定当前文件位置指示灯,调用ftell:

位置= ftell(fid)位置= 8

要将文件位置指示器移回4个字节,调用fseek再次:

status = fseek(fid,-4,'cof');

阅读下一个值:

三=欺诈(FID,1,'短');

读取在其他系统上创建的文件

不同的操作系统在字节或位级存储信息的方式不同:

  • 大端法系统从内存中最大的地址开始存储字节(也就是说,它们从大的端开始)。

  • 小endian.系统存储字节以最小的地址(小端)开始。

视窗®系统使用Little-Endian字节订购和UNIX®系统使用大端字节排序。

要读取在对侧系统上创建的文件,请指定用于创建文件的字节排序。您可以在呼叫中指定订购以打开文件,或在呼叫中读取该文件。

例如,考虑一个具有双精度值的文件little.bin.,在一个小endian系统上创建。要在Big-Endian系统上读取此文件,请使用以下命令(或两者):

  • 使用以下命令打开文件

    支撑材= fopen('little.bin', 'r', 'l')
  • 阅读文件

    mydata.=从文件中读(支撑材、“双”、“l”)

在哪里'L'表明低位优先排序。

如果您不确定订购系统使用哪个字节,请调用计算机功能:

cinfo最大限度订购] =计算机
返回的订购'L'对于小端系统,或者“B”大端法系统。