Matlab中fscanf函数使用

目录

语法

说明

示例

将文件内容读取到列向量中

将文件内容读取到数组中

跳过文件中的特定字符


        fscanf函数的功能是读取文本文件中的数据。

语法

A = fscanf(fileID,formatSpec)

A = fscanf(fileID,formatSpec,sizeA)

[A,count] = fscanf(___)

注意:

  • 读取函数 sscanf 和 fscanf 的格式设定符不同于写入函数 sprintf 和 fprintf 的格式。读取函数不支持精度字段。宽度字段指定可写入的最小值和可读取的最大值。

说明

        A = fscanf(fileID ,formatSpec) 将打开的文本文件中的数据读取到列向量 A 中,并根据 formatSpec 指定的格式解释文件中的值。fscanf 函数在整个文件中重新应用该格式,并将文件指针定位在文件结尾标记处。

        如果 fscanf 无法将 formatSpec 与数据相匹配,将只读取匹配的部分并停止处理。该文本文件由文件标识符 fileID 指示。使用 fopen 打开文件,指定字符编码,以及获取 fileID 值。读取文件后,请调用 fclose(fileID) 来关闭文件。

        A = fscanf(fileID ,formatSpec,sizeA) 将文件数据读取到维度为 sizeA 的数组 A 中,并将文件指针定位到最后读取的值之后。fscanf 按列顺序填充 A。sizeA 必须为正整数或采用 [m n] 的形式,其中 m 和 n 为正整数。

        [A,count] = fscanf(___) 还将返回 fscanf 读取到 A 中的字段数。对于数值数据,这是已读取的值数。可以将此语法与前面语法中的任何输入参数结合使用。

示例

将文件内容读取到列向量中

        创建一个包含浮点数的示例文本文件。如下所示:

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

        查看文件的内容。如下所示:

type nums1.txt
81.4724
90.5792
12.6987
91.3376
63.2359
9.7540
27.8498
54.6882

        打开要读取的文件并获取文件标识符 fileID。如下所示:

fileID = fopen('nums1.txt','r');

        定义要读取的数据的格式。使用 '%f' 指定浮点数。如下所示:

formatSpec = '%f';

        读取文件数据并按列顺序填充输出数组 A。fscanf 在整个文件中重新应用格式 formatSpec。如下所示:

A = fscanf(fileID,formatSpec)

A = 8×1

   81.4724
   90.5792
   12.6987
   91.3376
   63.2359
    9.7540
   27.8498
   54.6882

        A 是一个包含该文件中的数据的列向量。关闭文件。如下所示:

fclose(fileID);

将文件内容读取到数组中

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

x = 1:1:5;
y = [x;rand(1,5)];
fileID = fopen('nums2.txt','w');
fprintf(fileID,'%d %4.4f\n',y);
fclose(fileID);

        查看文件的内容。如下所示:

type nums2.txt

2 0.9058
3 0.1270
4 0.9134
5 0.6324

        打开要读取的文件并获取文件标识符 fileID。如下所示:

fileID = fopen('nums2.txt','r');

        定义要读取的数据的格式和输出数组的形状。如下所示:

formatSpec = '%d %f';
sizeA = [2 Inf];

        读取文件数据并按列顺序填充输出数组 A。fscanf 在整个文件中重新使用格式 formatSpec。如下所示:

A = fscanf(fileID,formatSpec,sizeA)

A = 2×5

    1.0000    2.0000    3.0000    4.0000    5.0000
    0.8147    0.9058    0.1270    0.9134    0.6324

        关闭文件,如下所示:

fclose(fileID);

        转置该数组,以便 A 与文件中数据的方向匹配。如下所示:

A = A'

A = 5×2

    1.0000    0.8147
    2.0000    0.9058
    3.0000    0.1270
    4.0000    0.9134
    5.0000    0.6324

跳过文件中的特定字符

        跳过示例文件中的特定字符并仅返回数值数据。创建一个包含温度值的示例文本文件。

str = '78°C 72°C 64°C 66°C 49°C';
fileID = fopen('temperature.dat','w');
fprintf(fileID,'%s',str);
fclose(fileID);

        读取文件中的数字并跳过文本 °C。此外,还返回 fscanf。读取的值数。扩展的 ASCII 代码 176 表示度数符号。

fileID = fopen('temperature.dat','r');
degrees = char(176);
[A,count] = fscanf(fileID, ['%d' degrees 'C'])
fclose(fileID);

A =

    78
    72
    64
    66
    49


count =

     5

        A 是一个包含文件中的数值的向量。count 指示 fscanf 读取五个值。

提示

  • 读取函数 sscanf 和 fscanf 的格式设定符不同于写入函数 sprintf 和 fprintf 的格式。读取函数不支持精度字段。宽度字段指定可写入的最小值和可读取的最大值。

  • 10
    点赞
  • 77
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值