weichanghe2000 发表于 2011-7-23 18:45:27

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

本帖最后由 weichanghe2000 于 2011-7-23 19:04 编辑

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

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

Vb=0
X=0.1, 0.12
Y=0.6, 0.3
Z=0.45, 0.23


Vb=0.4
X=0.34, 0.43
Y=0.45, 0.6
Z=0.6, 0.8


Vb=1
X=0.3, 0.35
Y=0.28, 0.3
Z=0.4, 0.21
K=0.78, 0.79
******************


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


Vb=0
X=0.7, 0.77
Y=0.5, 0.34
Z=0.8, 0.89


Vb=0.4
X=0.54, 0.88
Y=0.7, 0.89
Z=0.9, 0.34


Vb=1
X=0.78, 0.3
Y=0.34, 0.23
Z=0.5, 0.6
K=0.2, 0.4
******************

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

附件是output.txt

guocong89 发表于 2011-7-24 13:25:18

1. 不建议使用Mathematica做这个工作,流处理和字符串处理都不是Mathematica的强项,用c++都比它简单得多,建议用python

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

waynebuaa 发表于 2011-7-24 19:36:57

1. 不建议使用Mathematica做这个工作,流处理和字符串处理都不是Mathematica的强项,用c++都比它简单得多,建议用python
guocong89 发表于 2011-7-24 13:25 http://bbs.simwe.com/images/common/back.gif
能否对这句话展开的说一说

guocong89 发表于 2011-7-24 20:32:39

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

用正则表达式是另外一种思路。

weichanghe2000 发表于 2011-7-24 21:29:40

本帖最后由 weichanghe2000 于 2011-8-1 23:37 编辑

3# waynebuaa
Mathematica嘛,如果你是格式化的矩阵数据或者表格数据,可以直接用ReadList或者Read,但对于这种自由度很大的文本,就只能把每行当做字符串来处理,按等号,空格,逗号什么的来进行字符串切分,再把 ...
guocong89 发表于 2011-7-24 20:32 http://forum.simwe.com/images/common/back.gif

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

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

waynebuaa 发表于 2011-7-25 21:09:39

2# guocong89 本来就是文本文件,就是要你作为字符串对象来处理的,不管你用什么语言。
c++虽然也要用字符串处理,但是string,fstream这些类要好用得多

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

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

guocong89 发表于 2011-8-1 13:53:10

回复 6# waynebuaa

stl应该算作标准库吧:P

waynebuaa 发表于 2011-8-5 09:09:12

本帖最后由 waynebuaa 于 2011-8-5 09:34 编辑

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

但regexp 好像是tr1 才有的东西吧
页: [1]
查看完整版本: 用mmta如何抽取input.txt 部分内容,排列成output.txt中这样形式 选项