Main Content

strread

(不推荐)从字符串中读取格式化数据

不推荐使用 strread。请改用 textscan

说明

示例

A = strread(str) 将输入字符向量 str 中的数值数据读取到 1×N 向量 A 中,其中 N 等于 str 中以空白分隔的数字的数量。对包含数值数据的字符向量使用此语法。

示例

[A,B,...] = strread(str) 将字符向量输入 str 中的数值数据读取到标量输出变量 AB 等中。输出变量的数量必须与 str 中以空白分隔的数字的数量相等。

示例

[A,B,...] = strread(str,format) 使用指定的格式将 str 中的数据读取到变量 AB 等中。输出变量的数量必须与 format 参数中的格式设定符(例如 %s%d)的数量相同。只要仅使用一个格式设定符,就可以将 str 中的所有数据读取到单个输出变量中。

strread 的格式列出了有效的格式设定符。

示例

[A,B,...] = strread(str,format,N)str 中读取由 format 字符向量确定的前 N 个值,其中 N 是大于零的整数。如果 N 为 -1,则 strread 读取 str 中的所有值。当 str 仅包含数值数据时,可以将 format 设置为空字符向量 ('')。

示例

[A,B,...] = strread(___,Name,Value) 使用 Name,Value 参数自定义 strread。当 str 仅包含数值数据时,可以将 format 设置为空字符向量 ('')。

示例

全部折叠

创建一个包含由空格分隔的数字的字符向量。使用 strread 将数值数据读入一个数值数组中。

str = '0.41 8.24 3.57 6.24 9.27';
a = strread(str)
a = 1×5

    0.4100    8.2400    3.5700    6.2400    9.2700

创建一个包含由空格分隔的数字的字符向量。使用 strread 将数值数据读入单独的变量中。

str = '0.41 8.24 3.57 6.24 9.27';
[a, b, c, d, e] = strread(str)
a = 0.4100
b = 8.2400
c = 3.5700
d = 6.2400
e = 9.2700

创建一个包含由空格分隔的数字的字符向量。使用 strread 仅读取字符向量中的前三个数字,并将数据格式化为浮点数。

str = '0.41 8.24 3.57 6.24 9.27';
a = strread('0.41 8.24 3.57 6.24 9.27', '%4.2f', 3)
a = 3×1

    0.4100
    8.2400
    3.5700

创建一个包含由空格分隔的数字的字符向量。通过指定格式 %3.1f 将数据截断至一位小数:第二个设定符 %*1d 指示 strread 不要读取剩余的小数位数:

str = '0.41 8.24 3.57 6.24 9.27';
a = strread(str, '%3.1f %*1d')
a = 5×1

    0.4000
    8.2000
    3.5000
    6.2000
    9.2000

创建一个包含由空格分隔的数字的字符向量。将六个数字读入两个变量中。使用格式设定符 %f 两次以对每个输出应用相同的格式设置。指定的格式数量必须与输出数目匹配。

str = '0.41 8.24 3.57 6.24 9.27 3.29';
[a, b] = strread(str, '%f %f')
a = 3×1

    0.4100
    3.5700
    9.2700

b = 3×1

    8.2400
    6.2400
    3.2900

创建一个字符向量,其中包含由空格分隔的单词和数字,单词和数字之间用逗号分隔。

str = 'Section 4, Page 7, Line 26';

使用 strread 将文本读入一个变量,将数值数据读入另一个变量。格式输入 '%s' 指定第一个输出将是由空白字符分隔的字符向量。'%d,' 指定第二个输出将是有符号整数值并忽略 ',' 字符。

[name, value] = strread(str, '%s %d,')
name = 3x1 cell
    {'Section'}
    {'Page'   }
    {'Line'   }

value = 3×1

     4
     7
    26

创建一个包含单词和数字的字符向量,单词和数字之间用逗号分隔。

str = 'Section 4, Page 7, Line 26';

读取用逗号(而不是空格)分隔的字符向量。使用 '%s' 格式指定读取一个字符向量。由于指定了三个输出,必须指定三种格式。

[a, b, c] = strread(str,'%s %s %s', 'delimiter', ',')
a = 1x1 cell array
    {'Section 4'}

b = 1x1 cell array
    {'Page 7'}

c = 1x1 cell array
    {'Line 26'}

输入参数

全部折叠

输入文本指定为字符数组或字符串标量。

数据类型: char | string

输出格式,指定为用于设定输出的格式和数据类型的字符数组或字符串标量,这将决定返回参数的数目和类型。返回参数的数量必须与 format 字符向量中指定的转换设定符的数量匹配。

strread 函数会继续读取 str,直到读取完整个字符向量为止。如果 str 中的格式设定符数少于其中的实体数,则 strread 将从头开始重新应用格式设定符。

format 字符向量支持部分转换设定符和 C 语言 fscanf 例程规范。format 字符向量中的空白字符将被忽略。

strread 的格式

格式

操作

输出

字面值

(普通字符)

忽略匹配的字符。例如,在 Dept 后跟一个数字(表示部门编号)的字符向量中,要跳过 Dept 仅读取数字,请在 format 字符向量中使用 'Dept'

%d

读取有符号整数值。

双精度数组

%u

读取整数值。

双精度数组

%f

读取浮点值。

双精度数组

%s

读取以空白分隔的字符向量。

字符向量元胞数组

%q

读取带双引号的字符向量,并忽略双引号。

字符向量元胞数组

%c

读取包括空白在内的字符。

字符数组

%[...]

读取包含方括号中指定的字符的最长字符向量。

字符向量元胞数组

%[^...]

读取包含非方括号中指定字符的最长非空字符向量。

字符向量元胞数组

%*...

忽略 * 之后的字符。

无输出

%w...

读取 w 指定的字段宽度。%f 格式支持 %w.pf,其中 w 是字段宽度,p 是精度。

 

数据类型: char | string

值的数目,指定为大于零的整数。如果 N-1,则 strread 将在 str 中查找所有可能的值。

名称-值参数

将可选的参数对组指定为 Name1=Value1,...,NameN=ValueN,其中 Name 是参数名称,Value 是对应的值。名称-值参数必须出现在其他参数之后,但参数对组的顺序无关紧要。

在 R2021a 之前,使用逗号分隔每个名称和值,并用引号将 Name 引起来。

示例: strread(str,'','whitespace','\t')

空白字符,指定为字符向量或字符串数组。strread 将输入符号指定的字符视为空白。默认值为 '\b\r\n\t'

符号空白字符
\b退格符
\n换行符
\r回车符
\t水平制表符
\\反斜杠
%%百分号
''单引号

分隔符,指定为包含分隔符的字符向量或字符串标量。默认值是一个或多个空白字符。例如,如果字符向量 str 使用分号作为分隔符,请将 'delimiter' 指定为 ';'

指数字符,指定为包含被视为指数(如数字 4.3e12 中的“e”)的字符向量或字符串标量。默认值为 'eEdD'

缓冲区大小,指定为正整数,其中包含以字节为单位的最大字符向量长度。默认值是 4095

注释样式,指定为字符向量或字符串标量,其中包含 strread 用于指定注释的符号样式。strread 忽略由对应符号指定的字符。

样式操作
'matlab'忽略 % 之后的字符。
'shell'忽略 # 之后的字符。
'c'忽略介于 /**/ 之间的字符。
'c++'忽略 // 之后的字符。

为分隔文件中的空白数值字段返回的值,指定为数值标量

提示

  • 如果您使用换行符 (\n) 终止输入字符向量,则 strread 通过用 emptyvalue 字符填充较小的数组来返回大小相同的数组:

    [A,B,C] = strread(sprintf('5,7,1,9\n'),'%d%d%d', ...
                 'delimiter', ',', 'emptyvalue',NaN)
    A =
         5
         9
    B =
         7
       NaN
    C =
         1
       NaN

    如果删除此示例的输入字符向量中的 \n,则数组 A 仍为 2×1 数组,但 BC 现在为 1×1 数组。

版本历史记录

在 R2006a 中推出

另请参阅

|