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

[基础概念] 用mmta如何抽取input.txt 部分内容,排列成output.txt中这样形式 选项

[复制链接]
发表于 2011-7-23 18:45:27 | 显示全部楼层 |阅读模式 来自 浙江嘉兴
本帖最后由 weichanghe2000 于 2011-7-23 19:04 编辑

Hi,大家好,我有 input.txt 和 output.txt描述如下

input.txt 内容如下:
  1. ID=1 IX=-1 IY=-1
  2. Kuan=1 Chang=0.1 Tem=20
  3. Begin to generate date:

  4. Vb=0
  5. X=0.1, 0.12
  6. Y=0.6, 0.3
  7. Z=0.45, 0.23


  8. Vb=0.4
  9. X=0.34, 0.43
  10. Y=0.45, 0.6
  11. Z=0.6, 0.8


  12. Vb=1
  13. X=0.3, 0.35
  14. Y=0.28, 0.3
  15. Z=0.4, 0.21
  16. K=0.78, 0.79
  17. ******************


  18. ID=1 IX=2 IY=3
  19. Kuan=2 Chang=0.5 Tem=25
  20. Begin to generate date:


  21. Vb=0
  22. X=0.7, 0.77
  23. Y=0.5, 0.34
  24. Z=0.8, 0.89


  25. Vb=0.4
  26. X=0.54, 0.88
  27. Y=0.7, 0.89
  28. Z=0.9, 0.34


  29. Vb=1
  30. X=0.78, 0.3
  31. Y=0.34, 0.23
  32. Z=0.5, 0.6
  33. K=0.2, 0.4
  34. ******************

  35. 后面 还有很多段这样的
复制代码
output.txt 内容如下:
  1. ID Kuan Chang Tem IX IY Vb X1 X2 Y1 Y2 Z1 Z2 K1 K2
  2. 1 1 0.1 20 -1 -1 0 0.1 0.12 0.6 0.3 0.45 0.23 null null
  3. 1 1 0.1 20 -1 -1 0.4 0.34 0.43 0.45 0.6 0.6 0.8 null null
  4. 1 1 0.1 20 -1 -1 1 0.3 0.35 0.28 0.3 0.4 0.21 0.78 0.79
  5. 1 2 0.5 25 2 3 0 0.7 0.77 0.5 0.34 0.8 0.89 null null
  6. 1 2 0.5 25 2 3 0.4 054 0.88 0.7 0.89 0.9 0.34 null null
  7. 1 2 0.5 25 2 3 1 0.78 0.3 0.34 0.23 0.5 0.6 0.2 0.4
  8. ……………
  9. ……………
复制代码
我的问题是想请教大家:利用mathematica如何抽取 input.txt 中部分内容,并输出到output.txt,排列成output.txt中这样形式?
output.txt 第2到最后一行的值的顺序 和第1行的 变量名值是 一一对应。

附件是output.txt

本帖子中包含更多资源

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

×
发表于 2011-7-24 13:25:18 | 显示全部楼层 来自 LAN
Simdroid开发平台
1. 不建议使用Mathematica做这个工作,流处理和字符串处理都不是Mathematica的强项,用c++都比它简单得多,建议用python

2. 你的输入文件太糟糕。看上去你的文件似乎是自描述的,但是,不论对于要生成它的和使用它的程序,操作起来都是很困难的,而且可读性也不怎么样;简单地说,就是自己给自己找麻烦。因此建议你把你的输入文件变成xml格式的,或者acm题目类型的标准输入格式(参见http://poj.org/problem?id=1009),或者使用数据库
回复 不支持

使用道具 举报

发表于 2011-7-24 19:36:57 | 显示全部楼层 来自 北京顺义
1. 不建议使用Mathematica做这个工作,流处理和字符串处理都不是Mathematica的强项,用c++都比它简单得多,建议用python
guocong89 发表于 2011-7-24 13:25

能否对这句话展开的说一说
回复 不支持

使用道具 举报

发表于 2011-7-24 20:32:39 | 显示全部楼层 来自 北京
3# waynebuaa
Mathematica嘛,如果你是格式化的矩阵数据或者表格数据,可以直接用ReadList或者Read,但对于这种自由度很大的文本,就只能把每行当做字符串来处理,按等号,空格,逗号什么的来进行字符串切分,再把字符串转换成数字,Mathematica提供的相关函数很少,处理起来没有什么美感。c++虽然也要用字符串处理,但是string,fstream这些类要好用得多。

用正则表达式是另外一种思路。
回复 不支持

使用道具 举报

 楼主| 发表于 2011-7-24 21:29:40 | 显示全部楼层 来自 浙江嘉兴
本帖最后由 weichanghe2000 于 2011-8-1 23:37 编辑
3# waynebuaa
Mathematica嘛,如果你是格式化的矩阵数据或者表格数据,可以直接用ReadList或者Read,但对于这种自由度很大的文本,就只能把每行当做字符串来处理,按等号,空格,逗号什么的来进行字符串切分,再把 ...
guocong89 发表于 2011-7-24 20:32


对的,我这个 input.txt 是自己描述的,但是格式、结构和原始文件一模一样(原始文件在公司,不能拷贝出来,所以只能 自描述 input.txt)。

guocong89,你提到用正则表达式是 另外一种思路,我知道 perl 处理这种文件很轻松,但我没有学过perl
回复 不支持

使用道具 举报

发表于 2011-7-25 21:09:39 | 显示全部楼层 来自 北京顺义
2# guocong89 本来就是文本文件,就是要你作为字符串对象来处理的,不管你用什么语言。
c++虽然也要用字符串处理,但是string,fstream这些类要好用得多


这个不是那么回事吧,不用第三方库,纯粹的用标准库函数会很死板很麻烦的。。。

正则表达是字符串处理的一种强有力的工具。
要处理的对象越乱,正则表达的优势越明显。
回复 不支持

使用道具 举报

发表于 2011-8-1 13:53:10 | 显示全部楼层 来自 江苏徐州
回复 6# waynebuaa

stl应该算作标准库吧:P
回复 不支持

使用道具 举报

发表于 2011-8-5 09:09:12 | 显示全部楼层 来自 北京
本帖最后由 waynebuaa 于 2011-8-5 09:34 编辑

回复 7# guocong89
stl是标准模板库,是范型的概念。跟标准库(std域名里面的东西)不是一回事吧,
不过,有些东西是没必要分得那么细的,我们大可粗略的认为stl是std的子集。

但regexp 好像是tr1 才有的东西吧
回复 不支持

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-27 03:06 , Processed in 0.045706 second(s), 14 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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