Main Content

本页翻译不是最新的。点击此处可查看最新英文版本。

textread

(不推荐)读取文本文件中的数据;写入多个输出

不推荐使用 textread。请改用 textscan。有关详细信息,请参阅兼容性注意事项

说明

示例

[Var1,Var2,...,VarN] = textread(filename,format) 使用指定的格式将文件 filename 中的数据读取到变量 [Var1,Var2,...,VarN] 中,直到读取了整个文件。textread 对于读取已知格式的文本文件非常有用。textread 可处理固定格式文件和任意格式文件。

textread 可对输入中的字符组进行匹配和转换。每个输入字段都定义为一组连续延伸的非空白字符,这些字符延伸到下一个空白字符或分隔符,或者到达最大字段宽度时停止。重复的分隔符为有效字符,而重复的空白字符视为一个字符。

示例

[Var1,Var2,...,VarN] = textread(filename,format,N) 读取数据,将指定的 format 重用 N 次。如果 N 小于零,则 textread 会读取整个文件。

示例

[Var1,Var2,...,VarN] = textread(___,Name,Value) 支持上述语法中的任何输入参数,且可使用一个或多个 Name,Value 对组参数指定选项。

示例

全部折叠

采样数据 'scan1.dat' 的第一行是

09/12/2005 {'Level1'} 12.34 45 1.23e+10 Inf NaN {'Yes'} 5.1+3i

使用 % 格式按自由格式文件形式读取文件的第一行。

[date,level,x,y,answer] = textread('scan1.dat','%s %s %f %d %s',1)
date = 1x1 cell array
    {'09/12/2005'}

level = 1x1 cell array
    {'Level1'}

x = 12.3400
y = 45
answer = 1x1 cell array
    {'1.23e10'}

采样数据 'scan1.dat' 的第一行是

09/12/2005 {'Level1'} 12.34 45 1.23e+10 Inf NaN {'Yes'} 5.1+3i

按固定格式文件形式读取文件的第一行,并忽略浮点值。

[date,level,x,y,answer] = textread('scan1.dat','%s Level%d %f %d %s',1)
date = 1x1 cell array
    {'09/12/2005'}

level = 1
x = 12.3400
y = 45
answer = 1x1 cell array
    {'1.23e10'}

对于带有空单元格的文件,请使用 emptyvalue 参数。假定文件 data.csv 包含:

1,2,3,4,,6

7,8,9,,11,12

读取文件并用 NaN 填充任何空单元格:

data = textread('data.csv','','delimiter',',','emptyvalue',NaN)
data = 2×6

     1     2     3     4   NaN     6
     7     8     9   NaN    11    12

将文件 fft.m 读取到字符向量元胞数组。

file = textread('badpoem.txt','%s','delimiter','\n','whitespace','')
file = 4x1 cell
    {'Oranges and lemons,'    }
    {'Pineapples and tea.'    }
    {'Orangutans and monkeys,'}
    {'Dragonflys or fleas.'   }

输入参数

全部折叠

文件名,指定为字符向量或字符串标量。

格式,指定为字符向量或字符串标量。此参数确定返回参数的数目和类型。返回参数的数量是 format 的内容所指示的项目数。format 支持部分转换设定符和 C 语言 fscanf 例程约定。下表列出了 format 的值。format 中的空白字符将被忽略。

格式

操作

输出

字面值

(普通字符)

忽略匹配的字符。例如,在 Dept 后跟一个数字(用作部门编号)的文件中,要跳过 Dept 并仅读取该数字,请在格式设定符中使用 'Dept'

%d

读取有符号整数值。

双精度数组

%u

读取整数值。

双精度数组

%f

读取浮点值。

双精度数组

%s

读取以空白或分隔符分隔的文本。

字符向量元胞数组

%q

读取带双引号的文本,并忽略引号。

字符向量元胞数组

%c

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

字符数组

%[...]

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

字符向量元胞数组

%[^...]

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

字符向量元胞数组

%*...
instead of %

忽略 * 指定的匹配字符。

%w...
instead of %

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

 

读取数据的次数,指定为正整数。如果 N 小于零,textread 将读取整个文件。

名称-值参数

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

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

示例: 'WriteMode','append'

字符向量的最大长度,以字节为单位,指定为正整数。

忽略与指定值表示的符号相关联的字符,指定为 'matlab''shell''c''c++'

行为

'matlab'

忽略 % 之后的字符。

'shell'

忽略 # 之后的字符。

'c'

忽略介于 /**/ 之间的字符。

'c++'

忽略 // 之后的字符。

元素之间的分隔符,指定为一个或多个字符。在 textread 读取一系列连续的 delimiter 值时,它会将每个值视为一个单独的分隔符。

读取带分隔符的文件时赋予空单元格的值,指定为双精度标量值。

表示行尾的字符,指定为单个字符或 '\r\n'

指定指数字符,指定为指数字符。

标题行数,指定为正整数。

读取带分隔符的文件时赋予空单元格的值,指定为双精度标量值。textread 在读取一系列连续的 whitespace 值时,它会将这些值视为一个空白。

您可以使用 whitespace 保留文本中的前导空格和尾部空格。

textread('myfile.txt','%s','whitespace','')
ans = 
    '   An  example      of preserving    spaces      '

行为

' '

空格

\b

退格符

\n

换行符

\r

回车符

\t

水平制表符

版本历史记录

在 R2006a 之前推出

全部折叠

R2012b: 不推荐使用 textread

不推荐使用 textread。请改用 textscan。目前没有删除 textread 的计划。

使用 textscan 函数从文本文件或字符串中读取格式化数据。与 textread 函数相比,使用 textscan 的工作流有几项优势。

  • 不同于 textread,由 textscan 提供的输出是元胞数组。

  • 文件指针在对 textscan 的调用之间保持不变,从而允许您以分块形式读取数据。

  • textscan 工作流支持从远程位置读取。

  • textscan 生成的错误消息为如何调整语法和工作流提供了清晰的指导。

下表显示了 textread 的一些典型用法,以及如何更新代码以改用 textscan

不推荐推荐
[date,level,x,y,answer] = textread('scan1.dat',...
    '%s %s %f %d %s',1)
filename = 'scan1.dat';
fileID = fopen(filename);
C = textscan(fileID,'%s %s %f %d %s');
fclose(fileID);
celldisp(C)
data = textread('data.csv','','delimiter',',',...
    'emptyvalue',NaN)
filename = 'data.csv';
fileID = fopen(filename);
C = textscan(fileID,'%f %f %f %f %u8 %f', ...
    'Delimiter',',','EmptyValue',NaN);
fclose(fileID);
celldisp(C)

另请参阅

| | |