关于perl处理数据问题
时间:2010-10-03
来源:互联网
本帖最后由 quantumren 于 2010-10-03 22:25 编辑
各位大侠,小弟刚学perl,想处理一个数据文件
格式如下
CONFIG
0 3 19043
timestep 50 19043 0 3 0.010000
94.50 0.000 0.000
0.000 84.30 0.000
0.000 0.000 75.93
A 1 0.000000 0.000000
0.0000E+00 1.6860E+00 2.9202E+00
A 2 0.000000 0.000000
0.0000E+00 3.3720E+00 0.0000E+00
A 3 0.000000 0.000000
0.0000E+00 5.0580E+00 2.9202E+00
A 4 0.000000 0.000000
0.0000E+00 6.7440E+00 0.0000E+00
A 5 0.000000 0.000000
0.0000E+00 8.4300E+00 2.9202E+00
A 6 0.000000 0.000000
0.0000E+00 1.0116E+01 0.0000E+00
A 7 0.000000 0.000000
0.0000E+00 1.1802E+01 2.9202E+00
A 8 0.000000 0.000000
0.0000E+00 1.3488E+01 0.0000E+00
A 9 0.000000 0.000000
0.0000E+00 1.5174E+01 2.9202E+00
A 10 0.000000 0.000000
0.0000E+00 1.6860E+01 0.0000E+00
A 11 0.000000 0.000000
0.0000E+00 1.8546E+01 2.9202E+00
A 12 0.000000 0.000000
0.0000E+00 2.0232E+01 0.0000E+00
A 13 0.000000 0.000000
0.0000E+00 2.1918E+01 2.9202E+00
A 14 0.000000 0.000000
0.0000E+00 2.3604E+01 0.0000E+00
A 15 0.000000 0.000000
0.0000E+00 2.5290E+01 2.9202E+00
........................
前两行数据只读不处理,想要输出第三行第二个数据,然后后面38027行数据不处理,再后面要输出每隔一行的第一个数据,做5次循环。然后后面的数据只读不处理
我写的脚本如下
#!/usr/bin/perl
open(R,"HISTORY")|| die ("Could not open file");
open(OUTPUT,">result");
$line=<R>;
$line=<R>;
$line=<R>;
$line=~s/^\s+//;
chomp($line);
($a1,$a2,$a3,$a4,$a5,$a6)=split(/\s+/,$line);
$t[$step]=$a2;
print OUTPUT ($t[$step]);
for(my $n=0;$n<38027;$n++) {
$line=<R>; }
for(my $i=0;i<5;$i++) {
$line=<R>;
$line=<R>;
$line=~s/^\s+//;
chomp($line);
($a,$b,$c)=split(/\s+/,$line);
$x[$step][$i]=$a;
print OUTPUT ($x[$step][$i]);}
for(my $j=0;$j<52;$j++){
$line=<R>;}
close OUTPUT;
close R;
不知道为什么运行的结果就是不对呢,请各位大侠指点一下,小弟感激不尽啊!!!!!!!
各位大侠,小弟刚学perl,想处理一个数据文件
格式如下
CONFIG
0 3 19043
timestep 50 19043 0 3 0.010000
94.50 0.000 0.000
0.000 84.30 0.000
0.000 0.000 75.93
A 1 0.000000 0.000000
0.0000E+00 1.6860E+00 2.9202E+00
A 2 0.000000 0.000000
0.0000E+00 3.3720E+00 0.0000E+00
A 3 0.000000 0.000000
0.0000E+00 5.0580E+00 2.9202E+00
A 4 0.000000 0.000000
0.0000E+00 6.7440E+00 0.0000E+00
A 5 0.000000 0.000000
0.0000E+00 8.4300E+00 2.9202E+00
A 6 0.000000 0.000000
0.0000E+00 1.0116E+01 0.0000E+00
A 7 0.000000 0.000000
0.0000E+00 1.1802E+01 2.9202E+00
A 8 0.000000 0.000000
0.0000E+00 1.3488E+01 0.0000E+00
A 9 0.000000 0.000000
0.0000E+00 1.5174E+01 2.9202E+00
A 10 0.000000 0.000000
0.0000E+00 1.6860E+01 0.0000E+00
A 11 0.000000 0.000000
0.0000E+00 1.8546E+01 2.9202E+00
A 12 0.000000 0.000000
0.0000E+00 2.0232E+01 0.0000E+00
A 13 0.000000 0.000000
0.0000E+00 2.1918E+01 2.9202E+00
A 14 0.000000 0.000000
0.0000E+00 2.3604E+01 0.0000E+00
A 15 0.000000 0.000000
0.0000E+00 2.5290E+01 2.9202E+00
........................
前两行数据只读不处理,想要输出第三行第二个数据,然后后面38027行数据不处理,再后面要输出每隔一行的第一个数据,做5次循环。然后后面的数据只读不处理
我写的脚本如下
#!/usr/bin/perl
open(R,"HISTORY")|| die ("Could not open file");
open(OUTPUT,">result");
$line=<R>;
$line=<R>;
$line=<R>;
$line=~s/^\s+//;
chomp($line);
($a1,$a2,$a3,$a4,$a5,$a6)=split(/\s+/,$line);
$t[$step]=$a2;
print OUTPUT ($t[$step]);
for(my $n=0;$n<38027;$n++) {
$line=<R>; }
for(my $i=0;i<5;$i++) {
$line=<R>;
$line=<R>;
$line=~s/^\s+//;
chomp($line);
($a,$b,$c)=split(/\s+/,$line);
$x[$step][$i]=$a;
print OUTPUT ($x[$step][$i]);}
for(my $j=0;$j<52;$j++){
$line=<R>;}
close OUTPUT;
close R;
不知道为什么运行的结果就是不对呢,请各位大侠指点一下,小弟感激不尽啊!!!!!!!
作者: quantumren 发布时间: 2010-10-03
1,for( $i=0;$i<5;$i++) ;
2,写上use strict;
3.$step还没定义吧
2,写上use strict;
3.$step还没定义吧
作者: Mr-Summer 发布时间: 2010-10-04
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28