目录
语法
说明
示例
使用 % 读取自由格式文件中的所有字段
按固定格式文件形式读取,并忽略浮点值
使用字面值读取以忽略匹配的字符
指定值以填充空元胞
将文件读取到字符向量元胞数组
读取文件中的内容
textread函数的功能是读取文本文件中的数据;写入多个输出。
[A,B,C,...] = textread(filename,format)
[A,B,C,...] = textread(filename,format,N)
[...] = textread(...,param,value,...)
[A,B,C,...] = textread(filename,format) 以指定的 format 将数据从文件 filename 读入到 A、B、C 等变量中,直到整个文件读取完毕。将filename和format输入指定为字符向量或字符串标量。textread对于读取已知格式的文本文件非常有用。textread可处理固定格式文件和任意格式文件。
注意:读取大型文本文件、从文件中的特定点读取或将文件数据读取到元胞数组而非多个输出时,可以首选使用textscan函数。
textread 可对输入中的字符组进行匹配和转换。每个输入字段都定义为一组连续延伸的非空白字符,这些字符延伸到下一个空白字符或分隔符,或者到达最大字段宽度时停止。重复的分隔符为有效字符,而重复的空白字符视为一个字符。
format 输入,指定为字符向量或字符串向量,用于确定返回参数的数量和类型。返回参数的数量是 format 的内容所指示的项目数。format 支持部分转换设定符和 C 语言 fscanf 例程约定。下表列出了 format 的值。format 中的空白字符将被忽略。
格式 |
操作 |
输出 |
---|---|---|
字面值 (普通字符) |
忽略匹配的字符。例如,在 Dept 后跟一个数字(用作部门编号)的文件中,要跳过 Dept 并仅读取该数字,请在格式设定符 format 中使用 'Dept'。 |
无 |
%d | 读取有符号整数值。 |
双精度数组 |
%u | 读取整数值。 |
双精度数组 |
%f | 读取浮点值。 |
双精度数组 |
%s | 读取以空白或分隔符分隔的文本。 |
字符向量元胞数组 |
%q | 读取带双引号的文本,并忽略引号。 |
字符向量元胞数组 |
%c | 读取包括空白在内的字符。 |
字符数组 |
%[...] | 读取包含方括号中指定的字符的最长字符组。 |
字符向量元胞数组 |
%[^...] | 读取包含非方括号中指定字符的最长非空字符组。 |
字符向量元胞数组 |
%*... instead of % |
忽略 * 指定的匹配字符。 |
无输出 |
%w... instead of % |
读取 w 指定的字段宽度。%f 格式支持 %w.pf,其中 w 是字段宽度,p 是精度。 |
[A,B,C,...] = textread(filename,format,N) 读取数据,重用格式设定符 format 中指定的格式 N 次,其中 N 是大于零的整数。如果 N 小于零,textread 将读取整个文件。
[...] = textread(...,param,value,...) 使用下表中列出的 param/value 对组自定义 textread。
参数 |
值 |
操作 |
|
---|---|---|---|
bufsize | 正整数 |
指定字符向量的最大长度(以字节为单位)。默认值是 4095。 |
|
commentstyle | matlab | 忽略 % 之后的字符。 |
|
commentstyle | shell | 忽略 # 之后的字符。 |
|
commentstyle | c | 忽略介于 /* 和 */ 之间的字符。 |
|
commentstyle | c++ | 忽略 // 之后的字符。 |
|
delimiter | 一个或多个字符 |
充当元素之间的分隔符。默认值是无。 |
|
emptyvalue | 双精度标量 |
读取带分隔符的文件时提供给空元胞的值。默认值是 0。 |
|
endofline | 单个字符或 '\r\n' |
表示行尾的字符。 默认值由文件确定 |
|
expchars | 指数字符 |
默认值是 eEdD。 |
|
headerlines | 正整数 |
忽略文件开头的指定行数。 |
|
whitespace | 下面列表中的任一项: |
将字符向量视为空白。默认值是 ' \b\t'。 |
|
' ' \b \n \r \t |
空格 |
注意:textread 在读取一系列连续的whitespace值时,它会将这些值视为一个空白。读取一系列连续的delimiter值时,它会将每个值视为一个单独的分隔符。
mydata.dat 的第一行如下:
Sally Level1 12.34 45 Yes
使用 %
格式按自由格式文件形式读取文件的第一行。
[names, types, x, y, answer] = textread('mydata.dat', ...
'%s %s %f %d %s', 1)
返回
names =
'Sally'
types =
'Level1'
x =
12.34000000000000
y =
45
answer =
'Yes'
mydata.dat 的第一行如下:
Sally Level1 12.34 45 Yes
按固定格式文件形式读取文件的第一行,并忽略浮点值。
[names, types, y, answer] = textread('mydata.dat', ...
'%9c %6s %*f %2d %3s', 1)
返回
names =
Sally
types =
'Level1'
y =
45
answer =
'Yes'
format 中的 %*f 会导致 textread 忽略浮点值(此示例中为 12.34)。
mydata.dat 的第一行如下:
Sally Type1 12.34 45 Yes
读取文件的第一行,并忽略第二个字段中的字符 Type。
[names, typenum, x, y, answer] = textread('mydata.dat', ...
'%s Type%d %f %d %s', 1)
返回
names =
'Sally'
typenum =
1
x =
12.34000000000000
y =
45
answer =
'Yes'
在 format 中指定 Type%d 会导致第二个字段中的字符 Type 被忽略,而第二个字段的其余部分将作为有符号整数(此示例中为 1)读取。
对于带有空元胞的文件,请使用 emptyvalue 参数。假定文件 data.csv 包含:
1,2,3,4,,6
7,8,9,,11,12
读取文件并用 NaN 填充任何空元胞:
data = textread('data.csv', '', 'delimiter', ',', ...
'emptyvalue', NaN);
将文件 fft.m 读取到字符向量元胞数组。
file = textread('fft.m', '%s', 'delimiter', '\n', ...
'whitespace', '');
filename = '文档.txt';
[names]=textread(filename,'%s%*[^\n]')
%[^...] - 读取包含非方括号中指定字符的最长非空字符组。
%[^\n] - 就是一直读到行尾。
%*[^\n] - 就是从当前直接跳到行尾。
可对比
[names,rest]=textread(filename,'%s%[^\n]')
%读取文档中内容以元胞数组输出
filename = '文档.txt';
[names]=textread(filename,'%s')
提示
如果要保留文本中的前导和尾随空格,请使用whitespace参数,如下所示:
textread('myfile.txt', '%s', 'whitespace', '')
ans =
' An example of preserving spaces '