找回密码
 注册
Simdroid-非首页
查看: 65|回复: 1

一小段代码求优化:从文件读取数据并解析

[复制链接]
发表于 2012-7-30 21:36:12 | 显示全部楼层 |阅读模式 来自 上海浦东新区
本帖最后由 ithinksoim 于 2012-7-30 21:39 编辑

下面这个函数的功能是读取一个文本文件,解析之后返回一个cell数组,表示一列股票代码。但我总觉得代码有点罗嗦,尤其是sts = res{1}; txt = cat(2,sts{:})这段。
希望高手提点改进建议(我主要是想通过这种改进学习写简洁matlab代码的技巧)
  1. function stock = readStockList(file)
  2.     fid = fopen(file);
  3.     res = textscan(fid,'%s');
  4.     fclose(fid);
  5.     sts = res{1};
  6.     txt = cat(2,sts{:});
  7.     tks = regexp(txt,'[^()]+\((\d+)\)','tokens');
  8.     stock = cat(2,tks{:});
  9. end

复制代码
其中文本文件的结构是这样的:
  1. 深发展A(000001)
  2. 万科A(000002)
  3. PT金田A(000003)
  4. 国农科技(000004)
  5. 世纪星源(000005)
  6. 深振业A(000006)
  7. 零七股份(000007)
  8. ST宝利来(000008)
  9. 中国宝安(000009)
  10. SST华新(000010)
  11. 深物业A(000011)
复制代码


 楼主| 发表于 2012-8-3 23:16:19 | 显示全部楼层 来自 上海浦东新区
Simdroid开发平台
本帖最后由 ithinksoim 于 2012-8-3 23:21 编辑

仔细浏览了一下matlab文档里面关于cell数组的部分,发现
  1. sts = res{1};
  2. txt = cat(2,sts{:});
复制代码
可以去掉中间的临时变量,写成一句话:
  1. txt = cat(2,res{1}{:});
复制代码
或者干脆直接用方括号连接字符串:
  1. txt = [res{1}{:}];
复制代码


这样看起来舒服多了。

另外,貌似括号后面跟括号的写法在matlab里面只cell数组一家可用,其它类型都不可以。
比如,我想取向量[1 2 3 4]的第3个元素,就不能写成
  1. elem = [1 2 3 4](3);
复制代码
回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Simapps系列直播

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-10-2 02:29 , Processed in 0.027441 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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