文档

textscan

从文本文件或字符串中读取格式化的数据

语法

C = textcan (fileID,formatSpec)
C = textcan (fileID,formatSpec,N)
C = textscan(chr,formatSpec)
C = textcan (chr,formatSpec,N)
C = textscan(___、名称、值)
[正确答案][C]___

描述

例子

C= textscan (文件标识formatSpec将数据从打开的文本文件读取到单元格数组中,C.文本文件由文件标识符指示,文件标识.使用打开外部文件打开文件,获取文件标识价值。从文件中读取完成后,通过调用关闭文件文件关闭(文件标识)

textscan中的转换说明符尝试将文件中的数据匹配formatSpec.的textscan函数重新申请formatSpec并在无法匹配时停止formatSpec数据。

例子

C= textscan (文件标识formatSpecN方法读取文件数据formatSpecN次,N为正整数。之后从文件中读取附加数据N周期,叫textscan还是用原始的文件标识.如果您通过调用恢复文件的文本扫描textscan使用相同的文件标识符(文件标识),然后textscan自动在终止最后一次读取的位置恢复读取。

例子

C= textscan (空空的formatSpec从字符向量中读取文本空空的进入单元格数组C.从字符向量读取文本时,重复调用textscan每次重新开始扫描。若要从最后一个位置重新启动扫描,请请求位置输出。

textscan试图匹配字符向量中的数据空空的中指定的格式formatSpec

C= textscan (空空的formatSpecN使用formatSpecN次,N为正整数。

例子

C= textscan (___名称,值使用一个或多个选项指定选项名称,值配对参数,以及前面语法中的任何输入参数。

例子

C位置= textscan(___返回文件中的位置或扫描结束时的字符向量作为第二个输出参数。对于一个文件,这是ftell(文件标识)打电话后会回来textscan.对于一个字符向量,位置指示有多少字符textscan阅读。

例子

全部折叠

读取包含浮点数的字符向量。

空空的='0.41 8.24 3.57 6.24 9.27';C = textscan(chr,' % f ');

这说明符' % f 'formatSpec告诉textscan来匹配每个字段空空的到双精度浮点数。

显示单元格数组的内容C

celldisp (C)
C{1} = 0.4100 8.2400 3.5700 6.2400 9.2700

读取相同的字符向量,并将每个值截断为一个十进制数字。

C = textscan(chr,' % 3.1 f % * 1 d ');

这说明符% 3.1度表示字段宽度为3位,精度为1。的textscan函数共读取3位数字,包括小数点和小数点后的1位数字。说明符,% * 1 d,他告诉textscan跳过剩下的数字。

显示单元格数组的内容C

celldisp (C)
C{1} = 0.4000 8.2000 3.5000 6.2000 9.2000

加载数据文件并读取具有适当类型的每一列。

加载文件scan1.dat并在文本编辑器中预览其内容。屏幕截图如下所示。

文件名= fullfile(matlabroot,“例子”matlab的“scan1.dat”);

打开文件,并用适当的转换说明符读取每一列。textscan返回一个1-by-9单元阵列C

fileID = fopen(filename);C = textcan (fileID,'%s %s %f32 %d8 %u %f %f %s %f');文件关闭(文件标识);谁C
名称大小字节类属性C 1x9 2249 cell

中每个单元格的MATLAB®数据类型C

C
C =1x9单元阵列列1至5 {3x1 cell} {3x1 cell} {3x1 single} {3x1 int8} {3x1 uint32}列6至9 {3x1 double} {3x1 double} {3x1 cell} {3x1 double}

检查各个条目。请注意,C {1}C {2}是单元格数组。C {5}属于数据类型uint32的前两个元素C {5}a的最大值是多少32-bit unsigned integer,或者intmax(“uint32”)

celldisp (C)
C{1}{1} = 09/12/2005 C{1}{3} = 11/12/2005 C{2}{1} = Level1 C{2}{2} = Level2 C{2}{3} = Level3 C{3} = 12.3400 23.5400 34.9000 C{4} = 45 60 12 C b{5} = 4294967295 4294967295 200000 C{6} = Inf -Inf 10 C{7} = NaN 0.0010 100.0000 C{8}{1} = Yes C{8}{2} = No C{8}{3} = No C{9} = 5.1000 + 3.0000i 2.2000 - 0.5000i 3.1000 + 0.1000i

删除文本“水平”从上一个示例中数据的第二列中的每个字段。该文件的预览如下所示。

打开该文件并匹配formatSpec输入中的文本。

文件名= fullfile(matlabroot,“例子”matlab的“scan1.dat”);fileID = fopen(filename);C = textcan (fileID,'%s Level%d %f32 %d8 %u %f %f %s %f');文件关闭(文件标识);C {2}
ans =3x1 int32列向量1 2 3

中第二个单元格的MATLAB®数据类型C.的第二个细胞1-by-9单元阵列,C,现在是数据类型int32

disp(类(C{2}))
int32

将前一个示例中文件的第一列读入单元格数组,跳过其余行。

文件名= fullfile(matlabroot,“例子”matlab的“scan1.dat”);fileID = fopen(filename);日期= textscan(fileID,' % s % * ^ \ [n] ');文件关闭(文件标识);日期{1}
ans =3x1单元阵列{'09/12/2005'} {'10/12/2005'} {'11/12/2005'}

textscan返回单元格数组日期。

加载文件data.csv并在文本编辑器中预览其内容。屏幕截图如下所示。注意,该文件包含用逗号分隔的数据,还包含空值。

读取文件,将空单元格转换为

文件名= fullfile(matlabroot,“例子”matlab的“data.csv”);fileID = fopen(filename);C = textcan (fileID,'%f %f %f %f %u8 %f'...“分隔符””、““EmptyValue”、负);文件关闭(文件标识);column4 = C{4}, column5 = C{5}
column4 =2×14负
column5 =2x1 uint8列向量0 11

textscan返回一个1-by-6单元阵列,C.的textscan函数将空值转换为C {4},在那里C {4}与浮点格式关联。因为MATLAB®表示无符号整数作为0textscan将空值转换为C {5}0,而不是

加载文件data2.csv并在文本编辑器中预览其内容。屏幕截图如下所示。注意,该文件包含可以解释为注释和其他条目的数据,例如“NA”“na”这可能表示空字段。

文件名= fullfile(matlabroot,“例子”matlab的“data2.csv”);

指定输入textscan应该作为注释或空值并将数据扫描到C

fileID = fopen(filename);C = textcan (fileID,'%s %n %n %n %n'“分隔符””、“...“TreatAsEmpty”, {“NA”“na”},“CommentStyle”' / / ');文件关闭(文件标识);

显示输出。

celldisp (C)
C{1}{1} = abc C{1}{2} = def C{2} = 2 NaN C{3} = NaN 5 C{4} = 3 6 C{5} = 4 7

加载文件data3.csv并在文本编辑器中预览其内容。屏幕截图如下所示。注意,该文件包含重复的分隔符。

文件名= fullfile(matlabroot,“例子”matlab的“data3.csv”);

若要将重复的逗号视为单个分隔符,请使用MultipleDelimsAsOne参数,并将值设置为1真正的).

fileID = fopen(filename);C = textcan (fileID,'%f %f %f %f'“分隔符””、“...“MultipleDelimsAsOne”1);文件关闭(文件标识);celldisp (C)
8 . C{1} = 1 C{2} = 2 6 C{3} = 3 7

加载数据文件grades.txt并在文本编辑器中预览其内容。屏幕截图如下所示。注意,该文件包含重复的分隔符。

文件名= fullfile(matlabroot,“例子”matlab的“grades.txt”);

使用该格式读取列标题' % s '四次。

fileID = fopen(filename);formatSpec =' % s ';N = 4;C_text = textcan (fileID,formatSpec,N,“分隔符”“|”);

读取文件中的数值数据。

C_data0 = textcan (fileID,'%d %f %f %f'
C_data0 =1x4单元阵列{4x1 int32} {4x1 double} {4x1 double} {4x1 double}

的默认值。CollectOutput0),所以textscan在单独的数组中返回数值数据的每一列。

将文件位置指示符设置为文件的开头。

frewind(文件标识);

重新读取文件并将CollectOutput设置为1 (true)以将同一类的连续列收集到单个数组中。您可以使用repmat函数来指示% f转换说明符应该出现三次。当格式重复多次时,这种技术非常有用。

C_text = textcan (fileID,' % s 'N“分隔符”“|”);C_data1 = textcan (fileID,[' % d 'repmat (' % f '[1,3])),“CollectOutput”, 1)
C_data1 =1x2单元阵列{4x1 int32} {4x3 double}

所有的测试分数都是双倍的,被收集到一个4乘3的数组中。

关闭文件。

文件关闭(文件标识);

从文本文件读取数据的第一列和最后一列。跳过一列文本和一列整数数据。

加载文件names.txt并在文本编辑器中预览其内容。屏幕截图如下所示。注意,该文件包含两列引用文本,后面是一列整数,最后是一列浮点数。

文件名= fullfile(matlabroot,“例子”matlab的“names.txt”);

读取文件中数据的第一列和最后一列。使用转换说明符,%问如欲阅读用双引号括起的文本().% *问跳过引用的文本,% * d跳过整数字段,和% f读取浮点数。方法指定逗号分隔符“分隔符”名称-值对参数。

fileID = fopen(filename,“r”);C = textcan (fileID,'%q %*q %*d %f'“分隔符””、“);文件关闭(文件标识);

显示输出。textscan返回单元格数组C其中包含文本的双引号被删除。

celldisp (C)
C{1}{1} =史密斯,J. C{1}{2} =贝茨,G. C{1}{3} =居里夫人,M. C{1}{4} =默里,G. C{1}{5} =布朗,K. C{2} = 71.1000 69.3000 64.1000 133.0000 64.9000

加载文件german_dates.txt并在文本编辑器中预览其内容。屏幕截图如下所示。注意,第一列值包含德语日期,第二和第三列是数值。

文件名= fullfile(matlabroot,“例子”matlab的“german_dates.txt”);

打开文件。指定与文件关联的字符编码方案作为最后的输入打开外部文件

fileID = fopen(filename,“r”“n”“iso - 8859 - 15”);

读取文件。方法指定文件中日期的格式%{dd % MMMM yyyy}D .使用实例说明符。方法指定日期的区域设置DateLocale名称-值对参数。

C = textcan (fileID,'%{dd MMMM yyyy}D %f %f'...“DateLocale”“de_DE”“分隔符””、“);文件关闭(文件标识);

查看c中第一个单元格的内容。日期显示在MATLAB所使用的语言中,取决于您的系统语言环境。

C {1}
ans =3x1 datetime数组2014年1月01日2014年2月01日2014年3月01日

使用sprintf转换数据中的非默认转义序列。

创建包含表单提要字符的文本,\ f.然后,阅读课文使用textscan,叫sprintf来显式转换表单提要。

歌词= sprintf(“黑鸟将那\ fdead \ \ fsinging \鳍\相脱节\ fnight ');C = textscan(抒情,' % s '“分隔符”sprintf (“\ f”));C {1}
ans =7x1单元阵列{“黑鸟”}{‘唱歌’}{在‘}{的}{‘死’}{的‘}{‘夜’}

textscan返回一个单元格数组,C

从不同的位置重新开始扫描。

如果你重新扫描文本,textscan每次都从开头读。要从任何其他位置恢复扫描,请在初始调用中使用双输出参数语法textscan

例如,创建一个名为歌词.读取字符向量的第一个单词,然后恢复扫描。

抒情=“黑鸟在夜深人静时歌唱”;[第一个词,pos] = textscan(抒情的,' % 9 c '1);Lastpart = textscan(lyric(pos+1:end),' % s ');

输入参数

全部折叠

打开文本文件的文件标识符,用数字指定。在读取文件之前textscan,你必须使用打开外部文件打开文件,获取文件标识

数据类型:

数据字段的格式,指定为字符向量或一个或多个转换说明符的字符串。当textscan读取输入,并尝试将数据与中指定的格式相匹配formatSpec.如果textscan如果匹配数据字段失败,则停止读取并返回失败前读取的所有字段。

转换说明符的数量决定了输出数组中的单元格数量,C

数值字段

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

数字输入类型 转换说明符 输出类
整数,签署了 % d int32
% d8 int8
% d16 int16
% d32 int32
% d64 int64
整数,无符号 % u uint32
%与 uint8
% u16 uint16
% u32 uint32
% u64 uint64
浮点数 % f
% f32
% f64
% n

非数字字段

此表列出了用于包含非数字字符的输入的可用转换说明符。

非数字输入类型 转换说明符 细节
字符 % c 读取任何单个字符,包括分隔符。
文本数组 % s 读取为字符向量的单元格数组。
%问

读取为字符向量的单元格数组。如果文本以双引号(),省略前面的引号和后面的结束标记,这是单独双引号的第二个例子。替换转义的双引号(例如,”“abc”“)加上单双引号(“abc”).%问忽略出现在结束双引号之后的任何双引号。

例子:“% q”读取"乔""闪电""小史密斯"作为“闪电小乔·史密斯”

日期和时间 % D

读起来和%问,然后转换为datetime值。

% {fmt} D

读起来和%问,然后将其转换为日期时间值。fmt描述输入文本的格式。的fmt的有效值,是字母标识符的字符向量格式属性。textscan将不匹配此格式的文本转换为NaT值。

有关datetime显示格式的更多信息,请参见格式属性的datetime数组。

例子:' % {dd-MMM-yyyy} D '指定日期的格式,例如' 01 - 1月- 2014

持续时间 % T

读起来和%问以上,然后转换为持续时间值。

% {fmt} T

读起来和%问,然后将其转换为持续时间值。fmt描述输入文本的格式。的fmt的有效值,是字母标识符的字符向量格式属性。textscan将不匹配此格式的文本转换为值。

有关持续时间显示格式的更多信息,请参见格式属性的持续时间数组。

例子:' % {hh: mm: ss} T '指定持续时间的格式,例如“10:30:15”相当于10小时30分15秒。

类别 % C

读起来和%问,然后转换为类别数组中的类别名称。textscan转换<定义>文本到输出类别数组中未定义的值。

模式匹配 %[…]

读取为字符向量的单元格数组,括号内的字符直到第一个不匹配字符。包括在集合中,首先指定它:%[]…]

例子:%(亩)读取“夏天”作为“夏”

% ^[…]

排除括号内的字符,一直读取到第一个匹配字符。排除,首先指定它:%[^]…]

例子:% (^ xrg]读取“夏天”作为“summe”

可选的运营商

中的转换说明符formatSpec可包含可选操作符,它们按以下顺序出现(包括空格以使其更清晰):

可选操作符包括:

  • 要忽略的字段和字符

    textscan按顺序读取文件中的所有字符,除非您告诉它忽略某个特定字段或字段的一部分。

    在百分比字符(%)后面插入星号字符(*)以跳过一个字段或字符字段的一部分。

    操作符

    采取行动

    % *k

    跳过场地。k标识要跳过的字段的任何转换说明符。textscan不为任何此类字段创建输出单元格。

    例子:'%s %*s %s %s %*s %s'(空格可选)转换文本
    “黑鸟在夜深人静时歌唱”成四个输出单元用
    "黑鸟"中的"夜"

    ' % *n年代

    跳到n字符,n是一个小于或等于字段中的字符数的整数。

    例子:% * 3年代% s转换英语字母的“defg”.当分隔符为逗号时,将转换相同的分隔符中的,fghijkl”单元格数组包含“德”,“ijkl”

    ' % *nc '

    跳过n字符,包括分隔符字符。

  • 字段宽度

    textscan读取由字段宽度或精度指定的字符或数字的数量,或至多读取第一个分隔符(以先到的为准)。小数点,符号(+-)、指数字符和数值指数中的数字被计算为字段宽度内的字符和数字。对于复数,字段宽度指的是实部和虚部各自的宽度。对于虚部,字段宽度包括+或−,但不包括j.通过在转换说明符中的百分比字符(%)后面插入一个数字来指定字段宽度。

    例子:% 5 f读取“123.456”作为123.4

    例子:% 5度读取英语字母的作为”中的“

    当字段宽度操作符用于单个字符时(% c),textscan还读取分隔符、空格和行尾字符。
    例子:% 7 c可读7个字符,包括空白,所以“白天和黑夜”读起来像“天”

  • 精度

    对于浮点数(% n% f% f32% f64),您可以指定要读取的十进制位数。

    例子:% 7.2度读取“123.456”作为123.45

  • 要忽略的文本

    textscan对象后面的文本将被忽略formatSpec转换说明符。

    例子:%与水平读取“使”作为1

    例子:% u8Step读取的2个步骤作为2

数据类型:字符|字符串

申请的次数formatSpec,指定为正整数。

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64

输入文本阅读。

数据类型:字符|字符串

名称-值对实参

指定逗号分隔的可选对名称,值参数。的名字参数名称和价值对应的值。的名字必须出现在单引号内(' ').可以以任意顺序指定多个名称和值对参数Name1, Value1,…,的家

例子:C = textcan (fileID,formatSpec,'HeaderLines',3,'Delimiter',',')跳过数据的前三行,然后读取其余数据,将逗号作为分隔符。

名称不区分大小写。

全部折叠

确定数据连接的逻辑指示符,指定为逗号分隔的对,由“CollectOutput”,要么真正的.如果真正的,则导入函数将同一基础MATLAB的连续输出单元串联起来®类放入单个数组中。

表示要忽略的文本的符号,指定为逗号分隔的一对,由“CommentStyle”以及字符向量,字符向量的单元格数组,字符串,或字符串数组。

例如,指定一个字符,例如“%”忽略同一行符号后面的文本。指定包含两个字符向量的单元格数组,例如{'/*','*/'},以忽略这些序列之间的任何文本。

MATLAB只在每个字段的开头检查注释,而不是在字段内部。

例子:“CommentStyle ',{'/*','*/'}

数据类型:字符|字符串

用于读取日期的地区,指定为逗号分隔的对,由“DateLocale”和形式中的一个字符向量xx_YY,在那里xx是ISO 639-1两个字母的小写代码,用于指定一种语言,而YY是一个大写的ISO 3166-1 alpha-2代码,用于指定一个国家。有关区域设置的公共值列表,请参阅语言环境的名称-值对参数datetime函数。

使用DateLocale方法指定文本所在的地区,当阅读文本时,应将月份和星期的名称和缩写解释为日期% D格式说明符。

例子:“DateLocale”、“ja_JP”

字段分隔符字符,指定为逗号分隔的对,由“分隔符”一个字符向量或者一个字符向量的单元格数组。在字符向量的单元格数组中指定多个分隔符。

例子:“分隔符 ',{';','*'}

textscan将重复的分隔符字符解释为单独的分隔符,并向输出单元格返回空值。

在每一行数据中,默认的字段分隔符是空白。空白可以是空间的任意组合(' '),退格(“\ b”)或TAB (' \ t ')字符。如果不指定分隔符,则:

  • 分隔符字符与空白字符相同。默认的空白字符是' '“\ b”,' \ t '.使用“空格”参数指定备用空白字符。

  • textscan将重复的空白字符解释为单个分隔符。

当指定以下转义序列之一作为分隔符时,textscan将该序列转换为相应的控制字符:

\ b 退格
\ n 换行符
r \ 回车
\ t 选项卡
\ \ 反斜杠(

数据类型:字符|字符串

分隔文本文件中空数值字段的返回值,指定为逗号分隔的对,由“EmptyValue”还有一个标量。

行结束字符,指定为逗号分隔的对,由“EndOfLine”和一个字符向量或字符串。字符向量必须是“\ r \ n”或者它必须指定单个字符。常用的行尾字符是换行符(' \ n ')或乘马车返回(' \ r ').如果你指定“\ r \ n”,则导入函数处理任意r \\ n,以及两者的组合(\ r \ n)作为行尾字符。

默认的行尾序列为\ nr \,或\ r \ n,这取决于文件的内容。

如果文件中最后一行末尾缺少值和行尾序列,则导入函数将为这些字段返回空值。这确保了输出单元格数组中的单个单元格,C,尺寸相同。

例子:‘EndOfLine’,‘:’

数据类型:字符|字符串

指数字符,指定为逗号分隔的一对,由“ExpChars”和一个字符向量或字符串。默认的指数字符为eEd,D

数据类型:字符|字符串

标题行数,指定为逗号分隔的对,由“HeaderLines”一个正整数。textscan跳过标题行,包括当前行的其余部分。

多个分隔符处理,指定为逗号分隔的对,由“MultipleDelimsAsOne”,要么真正的.如果真正的,则导入函数将连续的分隔符视为单个分隔符。由空格分隔的重复分隔符也被视为单个分隔符。还必须指定分隔符选择。

例子:“MultipleDelimsAsOne”,1

时的行为textscan无法读取或转换,指定为逗号分隔的由“ReturnOnError”,要么真正的.如果真正的textscan没有错误地终止并返回已读的所有字段。如果textscan终止时出现错误,且不返回输出单元格数组。

要作为空值处理的占位符文本,指定为逗号分隔的由“TreatAsEmpty”以及字符向量,字符向量的单元格数组,字符串,或字符串数组。此选项仅适用于数字字段。

数据类型:字符|字符串

空白字符,指定为逗号分隔的对,由“空格”和包含一个或多个字符的字符向量或字符串。textscan添加一个空格字符,char (32),向任何指定的空格,除非空格为空(),formatSpec包括任何转换说明符。

当您将下列转义序列之一指定为任何空白字符时,textscan将该序列转换为相应的控制字符:

\ b 退格
\ n 换行符
r \ 回车
\ t 选项卡
\ \ 反斜杠(

数据类型:字符|字符串

输出数据类型的文本,指定为逗号分隔的对,由“TextType”,要么“字符”“字符串”.如果指定了值“字符”,然后textscan以字符向量的单元格数组形式返回文本。如果指定了值“字符串”,然后textscan以类型数组的形式返回文本字符串

输出参数

全部折叠

作为单元格数组返回的文件或文本数据。

中的每个数字转换说明符formatSpec,textscan函数返回一个K-by-1 MATLAB数值矢量到输出单元格数组,C,在那里K次数是多少textscan查找与说明符匹配的字段。

对于每个文本转换说明符(% s%问,或%[…])formatSpec,textscan函数返回一个K-by-1的字符向量单元数组,其中K次数是多少textscan查找与说明符匹配的字段。对于每个包含字段宽度运算符的字符转换,textscan返回一个K——- - - - - -字符数组,其中是字段宽度。

中的每个日期时间或分类转换说明符formatSpec,textscan函数返回一个K-by-1 datetime或分类向量到输出单元格数组,C,在那里K次数是多少textscan查找与说明符匹配的字段。

扫描结束时在文件或字符向量中的位置,作为类的整数返回.对于一个文件,ftell(文件标识)是否在调用后返回相同的值textscan.对于一个字符向量,位置指示有多少字符textscan阅读。

算法

textscan将数值字段转换为指定的输出类型,根据MATLAB关于溢出、截断和使用的规则,.例如,MATLAB表示一个整数为零。如果textscan查找与整数格式说明符(如% d% u),它返回空值为零而不是

在将数据匹配到文本转换说明符时,textscan读取,直到找到分隔符或行尾字符为止。当将数据匹配到数值转换说明符时,textscan读取,直到找到非数字字符为止。当textscan无法再将数据匹配到特定的转换说明符,它将尝试将数据匹配到formatSpec.号(+-)、指数字符和小数点都被认为是数字字符。

标志 数字 小数点 数字 指数的性格 标志 数字
读取一个符号字符,如果它存在。 读取一个或多个数字。 如果小数点存在,请读一个小数点。 如果有小数点,读一读紧跟着小数点的一个或多个数字。 读取一个指数字符,如果它存在。 如果有指数字符,则读取一个符号字符。 如果有指数字符,则读取它后面的一个或多个数字。

textscan将任何复数作为一个整体导入到一个复数数值字段中,将实部和虚部转换为指定的数值类型(例如% d% f).复数的有效形式是:

±现实> <±<图像放大>我| j

例子:5.7 - -3.1我

±<图像放大>我| j

例子:7 j

不要在复数中包含嵌入的空白。textscan将嵌入的空白解释为字段分隔符。

R2006a之前介绍过

这个话题有帮助吗?