fscanf公司

从文本文件读取数据

说明

例子

A=fscanf(文件ID,formatSpec)将打开的文本文件中的数据读入列向量一个和文件中解释的值根据指定的格式由formatSpec. 这个fscanf公司函数在整个文件中重新应用格式,并将文件指针放置在文件尾标记处。如果fscanf公司无法匹配formatSpec对于数据,它只读取匹配的部分并停止处理。

文本文件由文件标识符表示,文件ID. 使用FOPEN若要打开文件,请指定字符编码,然后获取文件ID值。当您完成通过调用阅读,关闭文件fclose(文件ID).

例子

A=fscanf(文件ID,formatSpec,SIZEA)读取的文件数据到一个数组,一个,其尺寸,SIZEA,并在最后一次读取值后定位文件指针。fscanf公司人口一个按列顺序排列。SIZEA必须是正整数或具有形式[百万],其中n个是正整数。

例子

[一个,计数]=fscanf(___)另外返回fscanf公司读入一个. 对于数值数据,这是读取的值数。可以将此语法与以前语法的任何输入参数一起使用。

实例

全部折叠

创建一个包含浮点数示例文本文件。

x=100*rand(8,1);文件ID=fopen('nums1.txt',“w”);fprintf(文件ID,'%4.4f\n',x);fclose(文件ID);

查看文件的内容。

类型nums1.txt
81.4724 90.5792 12.6987 91.3376 63.2359 9.7540 27.8498 54.6882

打开文件进行读取,并取得该文件标识符,文件ID.

FILEID =的fopen('nums1.txt',“r”);

定义数据的格式阅读。使用'%F'指定浮点数。

格式规范='%F';

读取文件数据,填充输出数组,一个,按列顺序排列。fscanf公司重新应用格式,formatSpec,在整个文件中。

A =的fscanf(FILEID,formatSpec)
一个=8×1个81.4724 90.5792 12.6987 91.3376 63.2359 9.7540 27.8498 54.6882

一个是从该文件包含数据的列向量。

关闭文件。

fclose(文件id);

创建一个包含整数和浮点数的示例文本文件。

X = 1:1:5;Y = [X;兰特(1,5)]。FILEID =的fopen('nums2.txt',“w”);fprintf(文件ID,'%d%4.4f \ N',y);fclose(文件ID);

查看文件的内容。

类型nums2.txt文件
1 0.8147 2 0.9058 3 0.1270 4 0.9134 5 0.6324

打开文件进行读取,并取得该文件标识符,文件ID.

FILEID =的fopen('nums2.txt',“r”);

定义数据的格式来读取和所述输出阵列的形状。

格式规范='%d%f';大小a=[2 Inf];

读取文件数据,填充输出数组,一个,按列顺序排列。fscanf公司重复使用格式,formatSpec,在整个文件中。

A=fscanf(文件ID、格式规范、大小)
一个=2×51.0000 2.0000 3.0000 4.0000 5.0000 0.8147 0.9058 0.1270 0.9134 0.6324
fclose(文件id);

转置阵,使得一个匹配文件中数据的方向。

A=A'
一个=5×2个1.0000 0.8147 2.0000 0.9058 3.0000 4.0000 0.1270,0.8037 5.0000 0.9134 0.6324

跳过示例文件中的特定字符,只返回数字数据。

创建包含温度值的样本的文本文件。

str公司='78摄氏度72摄氏度64摄氏度66摄氏度49摄氏度';FILEID =的fopen('温度.dat',“w”);fprintf(文件ID,'%s',str);fclose(文件ID);

读取文件中的数字,跳过文本“C”。还返回fscanf公司读取。扩展的ASCII代码176表示的程度的标志。

FILEID =的fopen('温度.dat',“r”);度=炭(176);[A,COUNT] =的fscanf(FILEID,['%d''C'])fclose(文件id);
A = 78 72 64 66 49数= 5

一个是包含文件中数值的向量。计数表明fscanf公司读五个值。

输入参数

全部折叠

打开的文本文件的文件标识符,指定为整数。在读取文件之前fscanf公司,必须使用FOPEN打开文件,并获得文件ID.

数据类型:

该文件中的数据字段,指定为一个或多个转换说明一个字符向量或标量串的格式。什么时候fscanf公司读取文件时,它会尝试将数据与formatSpec.

数值字段

下表列出了数字输入可用转换说明符。fscanf公司将值转换为十进制(以10为基数)表示形式。

数值字段类型 转换符 细节

整型,签署

%丁

基地10

%我

文件中的值确定基:

  • 默认值为基数10。

  • 如果最初的数字是0X要么0X,则这些值是十六进制的(基数为16)。

  • 如果最初的数字是0个,然后值是八进制(基数为8)。

%ld要么%李

64位值,基座10,8,或16

整型,无符号

%u型

基地10

%o型

基8(八进制)

%十

基数16(十六进制)

%吕,%低,%长x

64位值,基座10,8,或16

浮点数

%f型

浮点字段可以包含任何以下(不区分大小写)的:中导,-中导,, 要么-南.

%e类

%克

字符字段

此表列出了字符输入的可用转换说明符。

字符字段类型 转换符 说明

字符向量或标量串

%s公司

阅读不含空格的所有字符。

%c类

阅读任何单个字符,包括空格。
若要一次读取多个字符,请指定字段宽度。

模式匹配

%[...]

括号中的只读字符,直至第一个非匹配字符或空格。

例子:%[博物馆]读取“夏天”作为'总和'.

如果formatSpec包含数字和字符说明符的组合,然后fscanf公司将每个字符等价的数值。发生这种转换即使格式明确跳过所有数值(例如,formatSpec'%* d%s' 的).

可选的运营商

  • 要忽略的字段和字符

    fscanf公司读取所有数值和字符序列文件,除非你告诉它忽略某个领域或场的一部分。要跳过字段,插入一个星号(*)百分比符号后(%克ydF4y2Ba). 例如,要跳过整数,请指定%*丁.

  • 字段宽度

    要指定一个时间阅读的数字或文本字符的最大数目,插入百分号后一个数字。例如,%10厘米一次最多读取10个字符,包括空格。%四层读取最多4个位数的时间,包括小数点。

  • 文字文本到忽略

    fscanf公司忽略附加到formatSpec转换符。

    例子:级别%u读取'级别1'作为1个.

    例子:%uStep读取'2步'作为2个.

输出数组的维数,一个,指定为中导的整数,或两元件行向量。

形成的SIZEA输入 说明
中导 阅读到文件的末尾。
对于数字数据,输出,一个,是列向量。
对于文本数据,一个是一个字符向量。
n个 最多阅读n个数值或字符字段。
对于数字数据,输出,一个,是列向量。
对于文本数据,一个,是字符向量。
[M,N] 最多阅读*n个数值或字符字段。n个可以是中导不能。输出,一个,是-由-n个,按列顺序填写。

输出参数

全部折叠

文件数据,作为列向量、矩阵、字符向量或字符数组返回。类别和大小一个取决于formatSpec输入:

  • 如果formatSpec只包含数字说明符,然后一个是数字。如果您指定SIZEA那么,争论一个是指定大小的矩阵。否则,一个是一个列向量。如果输入包含比少SIZEA价值观,那么fscanf公司一个零。

    • 如果formatSpec只包含64位有符号整数说明符,然后一个是类的Int64的.

    • 如果formatSpec仅包含64位无符号整数说明符,然后一个是类的UINT64.

    • 除此以外,一个是类的.

  • 如果formatSpec只包含文字或文字说明符(%c类要么%s公司), 然后一个是一个字符数组。如果您指定SIZEA输入的字符更少,然后fscanf公司一个具有字符(0).

  • 如果formatSpec包含数字和字符说明符的组合,然后一个是数值,属于类,和fscanf公司每个文本字符转换为等价的数值。会发生此即使formatSpec明确跳过所有的数字字段(例如,formatSpec'%* d%s' 的).

  • 如果MATLAB®无法将文件数据与formatSpec,然后一个可以是数字或的字符阵列。类的一个依赖于该值fscanf公司在停止处理之前读取。

读取的字符数,作为标量值返回。

提示

  • 格式说明符的读取功能sscanf的fscanf公司从格式不同的写功能把格式数据写成串fprintf中. 读取函数不支持精度字段。宽度字段指定写入的最小值,但指定读金宝app取的最大值。

算法

MATLAB使用与文件关联的编码方案读取字符。在使用FOPEN功能。

扩展功能

R2006a前推出