新足迹

 找回密码
 注册

精华好帖回顾

· 手术日记:Casey Hospital (2008-11-28) 风再起时 · 另一个基本护理的药妆:SEBAMED (2006-6-27) 飞行
· 上山下乡考车记 (2005-12-17) 上山下乡 · 狂欢。悉尼---28~30楼18+~23+更新 (2010-3-1) 老song
Advertisement
Advertisement
12
返回列表 发新帖
楼主:dolphinmaz

求教个问题,对编程的人可能是小问题,对我就是大难题 [复制链接]

发表于 2015-5-30 20:29 |显示全部楼层
此文章由 dolphinmaz 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 dolphinmaz 所有!转贴必须注明作者、出处和本声明,并保持内容完整
gzrain 发表于 2015-5-30 00:30
an OO approach with ruby,
usage : process.rb

下了个ruby,在命令里输入这个,显示错,感觉是input file没有写对,能否告知source code里哪里写读取文件吗?谢谢

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
Advertisement
Advertisement

发表于 2015-5-30 20:39 |显示全部楼层
此文章由 dolphinmaz 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 dolphinmaz 所有!转贴必须注明作者、出处和本声明,并保持内容完整
搞定了~~~,谢谢楼上各位

发表于 2015-5-30 20:39 |显示全部楼层
此文章由 dolphinmaz 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 dolphinmaz 所有!转贴必须注明作者、出处和本声明,并保持内容完整
gzrain 发表于 2015-5-30 00:30
an OO approach with ruby,
usage : process.rb

最后一分了,不好意思

发表于 2015-5-30 21:45 |显示全部楼层
此文章由 gzrain 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 gzrain 所有!转贴必须注明作者、出处和本声明,并保持内容完整
本帖最后由 gzrain 于 2015-5-30 20:46 编辑
dolphinmaz 发表于 2015-5-30 19:39
最后一分了,不好意思


如果是在windows,你save的程序文件是process.rb , 要处理的数据文件是data.in, 运行命令就是
  1. ruby process.rb data.in
复制代码
输出文件就是new_data.in

重点是你检查我的处理结果是否你想要的,因为我不一定正确理解你的需求。

这种简单的处理,很多楼上的同学的思路都是可行的, 但实际在production, 需要考虑的事情是怎么优化处理; 普通的循环往往是要读入整个文件再loop。如果文件不大,几万行还好,像楼主情况300M的文本数据,读入再循环所需要的资源需求是很大的,而且很浪费; 我猜如果在普通pc上用ultraedt,word,excel 利用find/replace或者macro处理300m的文件,基本会是死机或者take a long time; production code都是要求per line处理,就算你文件是几个G的size,每次处理都是一行,这样内存占用就小很多

评分

参与人数 2积分 +11 收起 理由
天字第一号 + 8 感谢分享
dolphinmaz + 3 感谢分享

查看全部评分

发表于 2015-5-30 21:57 |显示全部楼层
此文章由 dolphinmaz 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 dolphinmaz 所有!转贴必须注明作者、出处和本声明,并保持内容完整
gzrain 发表于 2015-5-30 20:45
如果是在windows,你save的程序文件是process.rb , 要处理的数据文件是data.in, 运行命令就是输出文件就 ...

谢谢,现在我遇到一个问题是:输出的文件formatting的问题,能否另外起一行输入这个“0.000E+00"的数,开始不知道,刚才把生成的新文件放进去才发现,要求一行8个数,所以这个第17的只能另外起一行,不知道那个source code要怎么改,我自己加了\n在你的那个code上好像不行:
def add_new_item
    @block.last.strip! "\n" << delimiter << new_item << "\n"

谢谢了

发表于 2015-5-30 22:34 |显示全部楼层
此文章由 dolphinmaz 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 dolphinmaz 所有!转贴必须注明作者、出处和本声明,并保持内容完整
gzrain 发表于 2015-5-30 20:45
如果是在windows,你save的程序文件是process.rb , 要处理的数据文件是data.in, 运行命令就是输出文件就 ...

非常感谢gazrain的帮忙,好耐心的帮我解决问题,虽然不相识,但一直帮我,被感动,现在没有分了,等分回来补上,再次谢谢
Advertisement
Advertisement

发表于 2015-6-14 00:02 |显示全部楼层
此文章由 nali 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 nali 所有!转贴必须注明作者、出处和本声明,并保持内容完整
本帖最后由 nali 于 2015-6-14 10:33 编辑

有更快更简单的方法。

  1. $ awk '/^E[0-9]+/&&NR>1{print "0.000E+00"}1;END{print "0.000E+00"}' infile
复制代码
运行时间比较
  1. $ time awk '/^E[0-9]+/&&NR>1{print "0.000E+00"}1;END{print "0.000E+00"}' infile
  2. E0000508601584  0006.5  0000.3  0025.0  0000.7  0214.2  6244.0
  3. 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00 0.000E+00
  4. 0.000E+00 0.000E+00 1.139E-03 1.757E-05 3.795E-05 2.239E-05 1.468E-06 1.417E-04
  5. 0.000E+00 0.000E+00 1.139E-03 1.757E-05 3.795E-05 2.239E-05 1.468E-06 1.417E-04
  6. 0.000E+00
  7. E0000719801632  0020.0  0002.5  0400.0  0029.5  0216.6  6356.9
  8. 1.018E-01 5.360E-03 8.282E-02 6.156E-02 7.273E+00 2.993E-06 0.000E+00 0.000E+00
  9. 0.000E+00 2.171E-06 5.886E-05 4.484E-06 1.215E-05 0.000E+00 0.000E+00 1.450E-01
  10. 0.000E+00
  11. E0000719801633  0020.0  0002.5  0400.0  0029.5  0216.6  6356.9
  12. 1.018E-01 5.360E-03 8.282E-02 6.156E-02 7.273E+00 2.993E-06 0.000E+00 0.000E+00
  13. 0.000E+00 2.171E-06 5.886E-05 4.484E-06 1.215E-05 0.000E+00 0.000E+00 1.450E-01
  14. 0.000E+00
  15. E0000720100151  0015.0  0000.2  0150.0  0000.3  0216.5  6360.0
  16. 2.762E-04 1.452E-05 4.007E-04 1.090E-06 6.922E-04 0.000E+00 0.000E+00 8.351E-06
  17. 0.000E+00 0.000E+00 3.002E-05 2.983E-07 0.000E+00 0.000E+00 0.000E+00 7.625E-04
  18. 0.000E+00
  19. E0000820101627  0053.0  0001.4  0129.0  0028.6  0217.3  6359.9
  20. 3.343E-01 1.759E-02 1.204E-01 4.000E-02 6.205E-01 2.361E-05 0.000E+00 0.000E+00
  21. 0.000E+00 1.713E-05 4.644E-04 3.538E-05 9.588E-05 0.000E+00 0.000E+00 2.108E-01
  22. 0.000E+00

  23. real        0m0.004s
  24. user        0m0.002s
  25. sys        0m0.002s
复制代码
通常ruby的执行速度还算是快的,或许其还有改进的地方,或许是把时间花在了文件的是否存在的判断以及文件IO输出上了
  1. $ time ruby process.rb infile
  2. Processing infile to new_infile.

  3. real        0m1.257s
  4. user        0m0.585s
  5. sys        0m0.627s
复制代码
如果是windows系统的话,装gawk for windows 或者 cygwin,就支持 awk 命令了

评分

参与人数 2积分 +11 收起 理由
天字第一号 + 8 感谢分享
gzrain + 3 感谢分享

查看全部评分

发表于 2015-6-14 00:45 |显示全部楼层
此文章由 nali 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 nali 所有!转贴必须注明作者、出处和本声明,并保持内容完整
dolphinmaz 发表于 2015-5-30 20:57
谢谢,现在我遇到一个问题是:输出的文件formatting的问题,能否另外起一行输入这个“0.000E+00"的数,开 ...

你已经很接近了 。要这样改:
  1.   def add_new_item
  2.     @block.last.strip! << "\n" << new_item << "\n"
  3.   end
复制代码

评分

参与人数 2积分 +3 收起 理由
dolphinmaz + 2 感谢分享
laoqiu + 1 升靴快乐!

查看全部评分

发表于 2015-6-14 14:05 |显示全部楼层
此文章由 gzrain 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 gzrain 所有!转贴必须注明作者、出处和本声明,并保持内容完整
nali 发表于 2015-6-13 23:02
有更快更简单的方法。运行时间比较通常ruby的执行速度还算是快的,或许其还有改进的地方,或许是把时间花在 ...

高手出现了

其实我也知道这种问题用bash script处理应该是比较快的, 但我对这个懂的不多,好像做system admin基本都懂scripting

评分

参与人数 1积分 +6 收起 理由
laoqiu + 6 谢谢奉献

查看全部评分

发表于 2015-6-14 19:14 |显示全部楼层
此文章由 nali 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 nali 所有!转贴必须注明作者、出处和本声明,并保持内容完整
gzrain 发表于 2015-6-14 13:05
高手出现了  

其实我也知道这种问题用bash script处理应该是比较快的, 但我对这个懂的不多,好像做 ...

你写的ruby代码还是挺严谨的,考虑的很周到,这个要赞一下的。

评分

参与人数 2积分 +9 收起 理由
dolphinmaz + 3 感谢分享
laoqiu + 6 谢谢奉献

查看全部评分

发表于 2015-6-14 19:38 |显示全部楼层
此文章由 laoqiu 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 laoqiu 所有!转贴必须注明作者、出处和本声明,并保持内容完整
有意思,顶两位专业人士

评分

参与人数 1积分 +5 收起 理由
nali + 5 谢谢加分,还真升靴了。

查看全部评分

Advertisement
Advertisement

发表回复

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

本版积分规则

Advertisement
Advertisement
返回顶部