求助,工资文本转换

求助,工资文本转换

原始文件:(编号,姓名,工资)
-------------------------------------------

00014367423811520328285王小勇-109.00
C0024367423811520214121刁晓用-7.25
00034367423811520214071喻大森409.00
10014367423811520212695吕二青234.18
10036227003818620017835王得丹679.49
D0046227003813550029454刘小波767.22
R0054367423811520212943徐小明559.32

希望得到:

1︱4367423811520328285︱王小勇 | 0
2︱4367423811520214121︱刁晓用︱0
3︱4367423811520214071︱喻大森︱409
4︱4367423811520212695︱吕二青︱234.18
5︱6227003818620017835︱王得丹︱679.49
6︱6227003813550029454︱刘小波︱767.22
7︱4367423811520212943︱徐小明︱559.32
合计                   | 2649.21
   
-----------------------------------------------
1) 加入序号
2)用 | 分割各项
3)去掉编号前4个字符
3) 工资项若为负数,变为 0
4)最后将工资为正的,统计相加
序号是怎么排的?
原始文件中的前数字都是什么意思?
1)序号, 是依次从1开始排起,即所在的是第几行。
2)原始文件中的前4个数字(字母),指所属单位编号。这部分是要舍弃。
print join '|', unpack( '......', $orig_line );
perldoc -f unpack
perldoc -f join
flw    大哥 能写详细点吗?
有点急,3-8节前要给女同胞报钱啊


QUOTE:
原帖由 w123456 于 2008-3-7 10:30 发表
flw    大哥 能写详细点吗?
有点急,3-8节前要给女同胞报钱啊

说实话 flw 已经写的很详细了

他就差把代码给你写好了 flw是一个用心良苦的人 他是想让你学习一下而已


QUOTE:
原帖由 hitsubunnu 于 2008-3-7 10:35 发表

说实话 flw 已经写的很详细了

他就差把代码给你写好了 flw是一个用心良苦的人 他是想让你学习一下而已

说得不错。希望楼主不要误会我在这里做版主的目的:
我是希望有越来越多的人,在兴趣或者工作压力的驱动下,能够认认真真学 Perl,以达到我推广 Perl 的目的。
如果你的想法只是把工作任务完成好去领你的工资,那么我们就公事公办,你搞不定,我来替你搞,你跟你们领导申请一笔费用,先打到我账户上。
否则,你如何让我相信你“当我帮了你之后,你不会把 Perl 抛诸脑后”?

我是请flw 帮忙而已。
如果现在去看perldoc,可能明天才弄好。
女同胞不把我骂死。
偶像
我是你忠实的支持者
首先感谢flw版主的perl学习指导!透过这个例子的优化,获益匪浅。
#!/usr/bin/perl

use strict;
use warnings;
my ( $id, $name, $salary, $sum );
while (<>) {
    chomp;
    my ( $id, $name, $salary ) = unpack( "x4 A19 A9 A*", $_ );
    $salary = 0 if $salary < 0;
    print "$.|$id|$name|$salary\n";
    $sum+=$salary;
}
print "合计\t|$sum\n";

zhong:/home/perl-exercise # ./salary.pl salary.txt

1|4367423811520328285|王小勇|0
2|4367423811520214121|刁晓用|0
3|4367423811520214071|喻大森|409.00
4|4367423811520212695|吕二青|234.18
5|6227003818620017835|王得丹|679.49
6|6227003813550029454|刘小波|767.22
7|4367423811520212943|徐小明|559.32
合计    |2649.21