作者fuwafuwa (此人已死,有事烧纸)
看板Perl
标题[问题] 加入项目问题
时间Tue Jun 14 13:29:09 2011
(其实不知道怎麽下标题才比较清楚,新手发问请多包涵)
现在我要处理一些资料,资料型态如下:
1,2 1,15 1,8 1,17 1,88 1,86 1,158 1,3 1,4........
2,81 2,136 2,186 2,182 2,186 2,238 2,91 2,231 2,53 2,60 2,10.....
3,65 3,16 3,16 3,114 3,59 3,189 3,246 3,96 3,92 3,82 3,231....
就是(第几条,item),资料有六万多快七万条
想要做成(第几条,位置,1,item)这样的形式
最後得到的结果如下:
1,1,1,2 1,2,1,15 1,3,1,8 1,4,1,17 1,5,1,88...........
2,1,1,81 2,2,1,136 2,3,1,186 2,4,1,182..........
3,1,1,65 3,2,1,16 3,3,1,16 3,4,1,114..........
目前想到的做法是先把空白替换成换行符号,
然後针对每一行用split把,前後分开,
再给一个回圈,回圈从1开始到六万多,
回圈里给一个变数(位置),
如果序列条数跟回圈比对成功,位置就加一,
不成功就位置归零。
程式写了也可以跑,但是时间花非常多,
凌晨两点开始跑,跑到早上十点多才output到第11条的一半。囧
所以想请问板上的强者们,我的程式有什麽需要修改的地方?
我自己也想过一些加速的方法,
例如把input file写进阵列里,比对成功的输出完後就shift出去,
比对不成功就不再往下比对(←这边想破了头不知道该怎麽写),
也不知道这样的想法是否可行。
以下提供我的程式码,如果有描述不清的地方我可以再补充,
麻烦大家不吝赐教,谢谢。^^"
==
#(替换工作已做完):
open (OUT, ">>output_file.txt");
open (FILE, "input_file.txt")||die "$!\n";
foreach $line(<FILE>)
{
for $i (0..65156)
{
($cid, $transaction) = split(',', $line);
if ($cid == $i+1)
{
$tid = $tid+1;
print OUT "$cid,$tid,1,$transaction";
}
else
{
$tid = 0;
}
}
}
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 114.41.152.126
※ 编辑: fuwafuwa 来自: 114.41.152.126 (06/14 16:50)