爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 10246|回复: 12

[程序设计] Matlab读取txt文件,空值和分隔符都是空格

[复制链接]
回帖奖励 6 金钱 回复本帖可获得 1 金钱奖励! 每人限 1 次(中奖概率 80%)

新浪微博达人勋

发表于 2017-7-23 18:23:02 | 显示全部楼层 |阅读模式

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

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

x
定时报站点数据,txt格式,变量较多有117个,但是很多都是空白的没有,而且数据之间没有别的分隔符,也是空格,所以读取一直有问题,请大家赐教
1500805871(1).png
filename=filelist(iFile).name;
disp(filename);
headerlinesIn=1;
fid=fopen(filename,'r');
formatSpec = '%d';
N = 117;
C_data = textscan(fid,formatSpec,N,'Delimiter','','headerlines',headerlinesIn,'EmptyValue',-Inf);
fclose(fid);

data.txt

295.74 KB, 下载次数: 9, 下载积分: 金钱 -5

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

新浪微博达人勋

 楼主| 发表于 2017-7-23 21:06:34 | 显示全部楼层
现在'EmptyValue',-Inf这个完全不起作用,空值完全被后面列的数替代,一行里面的数少于117个
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2017-7-23 21:35:03 | 显示全部楼层

回帖奖励 +1 金钱

人工一个个对着呗 67列不多的
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2017-7-23 22:04:49 | 显示全部楼层

回帖奖励 +1 金钱

同ls,慢点儿对照肯定能解决的,也就是不要老想着用这个太省事的办法~尤其是发现没有达到效果的时候~~~

靠谱些,一行一行读成字符串吧
然后大致选取字符串的多少到多少,转int
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2017-7-23 22:12:49 | 显示全部楼层
微末1314 发表于 2017-7-23 21:35
人工一个个对着呗 67列不多的

这只是我贴出来的一个文件呀,事实上还有500多个,而且都比这个多呀
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2017-7-24 07:07:52 | 显示全部楼层
fn=filepath % 你文件的路径
[a,b,c,d,e,f,g,h]=textread(fn,'%f %f %f %f %f %f %f %f','headerlines',1);
试试看 textread
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 成长值: 32430
发表于 2017-7-24 08:22:59 | 显示全部楼层

回帖奖励 +1 金钱

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

新浪微博达人勋

 楼主| 发表于 2017-7-24 10:37:05 | 显示全部楼层

用了importdata还是不行,117个变量读出来变67列了,就是那种空白的列被后面有数值的列给补上了,就都错位了
79UXWGS6DN{YWF%OD4%YG[O.png
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2017-7-24 11:22:35 | 显示全部楼层
weinihou 发表于 2017-7-23 22:04
同ls,慢点儿对照肯定能解决的,也就是不要老想着用这个太省事的办法~尤其是发现没有达到效果的时候~~~

...

亲,能不能给两行具体的代码提示一下,以前没这么处理过
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2017-7-24 11:34:04 | 显示全部楼层
气象万千2011 发表于 2017-7-24 11:22
亲,能不能给两行具体的代码提示一下,以前没这么处理过

先说明哈,好久不用MATLAB了


你可以试试像6楼那种,但鉴于有空格,不要直接 %f  或者  %d  ,用 %s 提取字符串,
每个都指明长度,你大致数一数,%3s这种,具体再查查
然后非空的转数字str2double  str2int  之类的,空的置0

或者别用那种封装很完善的,自己手动,一行一行读,如
head=fgetl(fid);
然后从上面那个字符串里再提取
用 strread  或者  textscan


整体来说,就是多试~~~
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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