作者abliou (把青春freeze)
看板Perl
标题Re: [问题] 加入项目问题
时间Tue Jun 14 19:32:07 2011
※ 引述《fuwafuwa (此人已死,有事烧纸)》之铭言:
: (其实不知道怎麽下标题才比较清楚,新手发问请多包涵)
: 现在我要处理一些资料,资料型态如下:
: 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;
: }
: }
: }
open (OUT, ">>output_file.txt");
open (FILE, "input_file.txt")||die "$!\n";
foreach $line(<FILE>)
{
$tid = 0 ;
for $element (split/\s+/,$line){
$tid++ ;
($cid,$transcation)=split',',$element ;
print "$cid,$tid,1,$transcation " ;
}
}
--
如果青春注定要向前跑
他妈的...那我的出口在那?
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 42.72.59.64
1F:推 fuwafuwa:先谢谢你:) 可是这样cid=2时tid没有从1开始算耶^^" 06/14 19:47
2F:→ abliou:我不懂你的问题 为什麽要重算? 06/14 21:23
3F:→ abliou:我以为只要切开再把你要的东西塞进去就行了 06/14 21:24
4F:推 fuwafuwa:要重算的原因是要算每一条序列里有几个item 06/14 21:29