爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 3131|回复: 4

[混合编程] textscan读取错误

[复制链接]

新浪微博达人勋

发表于 2016-4-16 20:37:10 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
各位前辈们好,我现在遇到一个这样的问题:
我的数据是:
'''
站点标注,数据标注,北京时,站号,项目代码,年,年序日,时分,PM10,PM2.5,PM1,PM10_标识,PM2.5_标识,PM1_标识,PM10_流量,PM10_气温,PM10_气压,PM10_湿度,PM2.5_流量,PM2.5_气温,PM2.5_气压,PM2.5_湿度,PM1_流量,PM1_气温,PM1_气压,PM1_湿度,Flag_PM10,Flag_PM2.5,Flag_PM1
OKOKOK00,V00,201603010800,50745,2225,2016,61,0000,48.8,23.4,-999.9,N,N,F,16.5,-5.4,119.3,45.1,16.6,-4.5,119.3,42.7,-999.9,-999.9,-999.9,-999.9,V0,V0,V2
......
'''
这种格式的txt,我采用命令
'''
f_d1=textscan(fid,'%*s,%*s,%s,%*s,%*s,%*d,%d,%d,%f,%f,%f,%*s,%*s,%*s,%*f,%*f,%*f,%*f,%*f,%*f,%*f,%*f,%*f,%*f,%*f,%*f,%f,%f,%f',29,'delimiter',',');
'''
企图跳过不需要的列,得到想要的数据,结果得到的是一个空的9*1的cell。
使用
'''
f_d2=textscan(fid,'%s','delimiter',',');
'''
得到的是一个1*1的cell,里面的数据是这样:
'站点标注'
'数据标注'
'北京时'
'站号'
'项目代码'
'年'
'年序日'
'时分'
'PM10'
'PM2.5'
'PM1'
'Flag_PM10'
'Flag_PM2.5'
'Flag_PM1'
''
'V00'
'201603010800'
'52203'
'2225'
'2016'
'61'
'0000'
'114.90'
'-999.9'
'-999.9'
'V0'
'V2'
'V2'
''

很奇怪啊,求大神们给予帮助与解释。顺便,我命令是哪里错了导致不能正确读数据呢?

密码修改失败请联系微信:mofangbao

新浪微博达人勋

 成长值: 32430
发表于 2016-4-16 21:00:08 | 显示全部楼层
importdata,比这个不知道好用到哪里去了
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2016-4-17 08:00:43 | 显示全部楼层
二爷名声在外 发表于 2016-4-16 21:00
importdata,比这个不知道好用到哪里去了

多谢二爷指导,importdata命令的效果是这样的:
'站点标注,数据标注,北京时,站号,项目代码,年,年序日,时分,PM10,PM2.5,PM1,Flag_PM10,Flag_PM2.5,Flag_PM1'
',V00,201603010800,52203,2225,2016,61,0000,114.90,-999.9,-999.9,V0,V2,V2'
',V00,201603010805,52203,2225,2016,61,0005,131.60,-999.9,-999.9,V0,V2,V2'
还是当成了一整个字符串读了,delimiter设置好像没用。我的命名如下:
[A,d_Out]=importdata(f_name);%d_Out输出是',',但是我用A=importdata(f_name,',',1);后得到的A如下:
'站点标注,数据标注,北京时,站号,项目代码,年,年序日,时分,PM10,PM2.5,PM1,Flag_PM10,Flag_PM2.5,Flag_PM1'
请教我怎么解决!拜谢~~~

密码修改失败请联系微信:mofangbao

新浪微博达人勋

 成长值: 32430
发表于 2016-4-17 08:22:27 | 显示全部楼层
我记得这个应该是一个字符串数组和一个数字数组,你再看一下有没有其它的结构体…
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2016-4-18 10:31:59 | 显示全部楼层
本帖最后由 zeroes 于 2016-4-18 10:40 编辑

textscan 不是一般的强大。读取数据的能力,特别是容错能力超强,只要你会用对格式
例如如下格式调用:
data=textscan(fid,formats(2,'%s',9,'%f',3,'%s',12,'%f',3,'%s'),inf,'HeaderLines',1,'delimiter',',','CollectOutput',true);
跳过1行头文件,formats中的文件读取格式可以自己设置。formats函数见附件。

formats.m

1018 Bytes, 下载次数: 9, 下载积分: 金钱 -5

密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表