| 查看: 3296 | 回复: 5 | ||
jhl2011新虫 (小有名气)
|
[求助]
求助关于importdata函数的问题 已有1人参与
|
|
求助一个关于MATLAB importdata 函数的问题。用这个函数读取一个TXT文件,文件中第一行和第二行都是文本,从第三行到最后都是数字,之前用这个函数读取可以将数字读取到 .data 里面,后来修改了txt文件的内容之后就发现出问题了。 经过研究可能是由于第一行文本过长导致MATLAB 当成了两行(在记事本打开后,取消自动换行后第一行(没有换行符)仍然显示为两行),读取结果是原来是六千多行一百多列的数据,读取到.data里面只有一列, .textdata 里面有 一万多行 八十多列,所以应该是第一行被MATLAB认为是两行了 ![]() 所以求助一下有没有解决的办法? 删除第一和第二行是一个办法,但我想保留表头 手动导入可以导入成列向量并且直接用变量名,但我不知道怎么用m文件实现,因为要批量处理,如果可以实现这个是最好的。 |
» 猜你喜欢
垃圾破二本职称评审标准
已经有17人回复
职称评审没过,求安慰
已经有30人回复
回收溶剂求助
已经有6人回复
投稿Elsevier的Neoplasia杂志,到最后选publishing options时页面空白,不能完成投稿
已经有22人回复
申请26博士
已经有5人回复
EST投稿状态问题
已经有7人回复
毕业后当辅导员了,天天各种学生超烦
已经有4人回复
聘U V热熔胶研究人员
已经有10人回复
求助文献
已经有3人回复
投稿返修后收到这样的回复,还有希望吗
已经有8人回复
csp101
金虫 (著名写手)
- 应助: 9 (幼儿园)
- 金币: 9688.1
- 散金: 120
- 红花: 7
- 帖子: 1444
- 在线: 81.8小时
- 虫号: 3076622
- 注册: 2014-03-21
- 性别: GG
- 专业: 零件成形制造
2楼2016-07-09 23:44:34
jhl2011
新虫 (小有名气)
- 应助: 1 (幼儿园)
- 金币: 424.1
- 帖子: 154
- 在线: 8.8小时
- 虫号: 3638822
- 注册: 2015-01-11
- 性别: GG
- 专业: 工程热物理与能源利用
3楼2016-07-14 08:36:17
csp101
金虫 (著名写手)
- 应助: 9 (幼儿园)
- 金币: 9688.1
- 散金: 120
- 红花: 7
- 帖子: 1444
- 在线: 81.8小时
- 虫号: 3076622
- 注册: 2014-03-21
- 性别: GG
- 专业: 零件成形制造
4楼2016-07-14 23:19:58
jhl2011
新虫 (小有名气)
- 应助: 1 (幼儿园)
- 金币: 424.1
- 帖子: 154
- 在线: 8.8小时
- 虫号: 3638822
- 注册: 2015-01-11
- 性别: GG
- 专业: 工程热物理与能源利用
★ ★
jjdg: 金币+2, 感谢分销 2017-02-21 16:04:20
jjdg: 感谢分享 2017-02-21 16:04:39
jjdg: 金币+2, 感谢分销 2017-02-21 16:04:20
jjdg: 感谢分享 2017-02-21 16:04:39
|
自行回答这个问题,过了这么久终于发现原因了 在 matlab 中使用 importdata(filename) 这个函数的时候,它会判断哪些行属于 header, 哪些属于 data,可以调用 [A,delimiterOut,headerlinesOut] = importdata(filename) 就可以看出读出来有多少行是判定为 header。 那么问题就出现在判定标准上。 今天做了一下尝试,发现判定一行是否为 header 就在于它的最后一个字符是不是数字。 我的数据文件第一行为变量名,所以都是字母,第二行为单位,一开始的单位行最后一个是A,所以importdata函数判定为header,所以用上面函数读出来A变量中 a.data就是数据矩阵, headerlinesOut = 2 表明读到了两行header,正确。 后来用另一组数据,第二行最后是1,读出来 A.data是错的,headerlinesOut = 1,表明它把第二行当成是数据了,但读下来又存在非数字元素,所以都存到 A.textdata里面去了。 |
5楼2017-02-15 22:31:56
jhl2011
新虫 (小有名气)
- 应助: 1 (幼儿园)
- 金币: 424.1
- 帖子: 154
- 在线: 8.8小时
- 虫号: 3638822
- 注册: 2015-01-11
- 性别: GG
- 专业: 工程热物理与能源利用
★
jjdg: 金币+1, 感谢分享 2017-02-21 16:04:52
jjdg: 金币+1, 感谢分享 2017-02-21 16:04:52
|
再增加一个小技巧,在matlab 用窗口打开数据文件之后,可以选择数据范围,变量名称等,选完之后在导入所选内容按钮下面有一个箭头,点击可以展开,下面有一项是生成脚本,可以把你当前导入数据的设置用脚本保存下来,我看了代码,可以参考用来打开数据文件。 主要是用textscan函数 %% 初始化变量。 filename = '。。。'; delimiter = ','; startRow = 48; %% 每个文本行的格式字符串: % 列1: 文本 (%s) % 列2: 双精度值 (%f) % 列3: 双精度值 (%f) % 列4: 双精度值 (%f) % 列5: 文本 (%s) % 列6: 文本 (%s) % 列7: 文本 (%s) % 列8: 文本 (%s) % 列9: 文本 (%s) % 列10: 文本 (%s) % 列11: 文本 (%s) % 列12: 文本 (%s) % 列13: 文本 (%s) % 列14: 文本 (%s) % 列15: 文本 (%s) % 列16: 文本 (%s) % 列17: 文本 (%s) % 列18: 文本 (%s) % 列19: 文本 (%s) % 列20: 文本 (%s) % 列21: 文本 (%s) % 列22: 文本 (%s) % 列23: 文本 (%s) % 有关详细信息,请参阅 TEXTSCAN 文档。 formatSpec = '%s%f%f%f%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%[^\n\r]'; %% 打开文本文件。 fileID = fopen(filename,'r'); %% 根据格式字符串读取数据列。 % 该调用基于生成此代码所用的文件的结构。如果其他文件出现错误,请尝试通过导入工具重新生成代码。 textscan(fileID, '%[^\n\r]', startRow-1, 'WhiteSpace', '', 'ReturnOnError', false); dataArray = textscan(fileID, formatSpec, 'Delimiter', delimiter, 'EmptyValue' ,NaN,'ReturnOnError', false); %% 关闭文本文件。 fclose(fileID); |
6楼2017-02-20 15:31:33














回复此楼