文档

导入大文本文件中的数据块

此示例示出了如何从一个任意大的分隔文本文件使用读出的数据的小块textscan功能,避免内存错误。的示例示出了如何指定一个恒定的块大小的第一部分。的例子中示出了第二部分如何读取和在一个循环中处理数据的每个块。

指定块大小

指定一个恒定的块大小,然后处理循环内的数据的每个块。

下面的文字复制并粘贴到文本编辑器创建一个制表符分隔的文本文件,bigfile.txt在当前文件夹。

##甲ID = 02476 ## YKZ时间戳温度湿度风天气06九月2013 01:00:00 6.6 89 4清楚06九月2013 5点00分00秒95 5.9 1 06清晰九月2013 09:00:00 15.6 51 5主要清楚06九月2013 13:00:00 19.6 37 10主要清楚06九月2013 22.4 17时00分00秒41 9多云06九月2013二十一点00分00秒17.3 67 7主要清楚##乙ID = 02477 ## YVR时间戳温度湿度风天气09九月2013 01:00:00 15.2 91 8 09清晰九月2013 5点00分00秒19.1 94 7 N / A 09-Sep-2013 9点00分00秒18.5 94 4 09雾九月2013 13:00:00 20.1 81 15主要清楚09九月2013 20.1 17时00分00秒77 17 N / A 09九月2013 18:00:00 20.0 75 17 N / A 09九月2013 16.8 21时00分00秒90 25主要清楚##çID = 02478 ## YYZ时间戳温度湿度风天气

这个文件有评论用##开头的行,整个文件。的数据被布置成五列:第一列包含文本指示时间戳。第二,第三和第四列包含数字数据表示的温度,湿度和风速。最后一列包含描述性文本。

定义每个块的大小从文本文件阅读。你不需要预先知道块的总数,并在文件中的数据行数没有均匀地分成块的大小。

指定的5块大小。

N = 5;

打开文件用阅读FOPEN功能。

FILEID =的fopen('bigfile.txt');

FOPEN返回一个文件标识符,FILEID,该textscan函数调用从文件中读取。FOPEN位置在文件的开头的指针,每个读操作使该指针的位置。

使用格式说明,如描述的每个数据字段'%s' 的对于字符向量,'%d'为的整数,或'%F'一个浮点数。

formatSpec ='%S%F%F%F%s' 的;

在一个环路,通话textscan读取数据的每个块。文件标识符,格式specifer,和段大小(ñ),是第三个输入textscan。忽略使用注释行CommentStyle名称 - 值对的参数。使用指定标签分隔符分隔符名称 - 值对的参数。然后,处理在块中的数据。在这个例子中,调用分散显示的温度和湿度值的块中的散点图。在循环内的命令执行而文件指针不在文件的末尾。

K = 0;〜FEOF(FILEID)k = k + 1;C = textscan(FILEID,formatSpec,N,'CommentStyle''##'“分隔符”'\ t');图散射(C {2},C {3})标题([温湿度,阻止“,num2str(K)])结束

textscan读取数据bigfile.txt无限期地,直到它到达该文件或直到结束它不能在所指定的格式读出的数据的一个块formatSpec。对于每一个完整的块,textscan返回一个1×5单元阵列。由于样本文件,bigfile.txt,包含13行数据,textscan返回的最后一块只有3行。

考虑到温度值返回的最后一个块textscan

13 C {2}
ANS = 20.1000 20.0000 16.8000

关闭文件。

FCLOSE(FILEID);

与任意块大小读数据

读取并处理每个单独文件中的注释行之间的数据的块,bigfile.txt。每个块的长度可以是任意的。但是,你必须指定的行数的数据块之间跳过。在bigfile.txt中,每个数据块由注释两行之前。

打开文件进行读取。

FILEID =的fopen('bigfile.txt');

指定要读取的数据格式。告诉textscan忽略由包括某些数据字段%*formatSpec,格式说明。在这个例子中,使用跳过浮点数据的第三和第四列'%*F'

formatSpec ='%S%F%* F%* F%S';

读取文件中的数据块。使用HeaderLines名称 - 值对参数,以指示textscan读取数据前要跳过两行。

d = textscan(FILEID,formatSpec,'HeaderLines',2,“分隔符”'\ t'
d = {7X1细胞} [6X1双{6X1细胞}

textscan返回一个1×3单元阵列,d

查看第一个单元格中的内容d

d {1,1}
ANS = '06 -sep-2013 01:00:00' '06 -sep-2013 5时00' 分○○秒'06 -sep-2013九点00' 分00秒'06 -sep-2013 13:00:00''06 -sep-2013十七时00' 分○○秒'06 -sep-2013 21点00' 分零零秒## B'

textscan文后停止读取,'## B',因为它无法读取后面的文本作为一个号,由指定的formatSpec。文件指针保持在位置textscan终止。

处理数据的第一个块。在这个例子中,发现在该第二小区中的最大温度值d

maxTemp1 = MAX(d {1,2})
maxTemp1 = 22.4000

重复调用textscan读取数据的下一个块。

d = textscan(FILEID,formatSpec,'HeaderLines',2,“分隔符”'\ t'
d = {8X1细胞} [7X1双{7X1细胞}

再次,textscan返回一个1×3单元阵列。

查找数据的这种块中的最大温度值。

maxTemp2 = MAX(d {1,2})
maxTemp2 = 20.1000

关闭文件。

FCLOSE(FILEID);

也可以看看

|

相关话题

是这个主题有帮助吗?