1SYSTEM: TMS1 STATE OF DISMAY DATE: 10/23/06 REPORT: B155A761 DEPARTMENT OF CONFUSION TIME: 15:05 EMPL ID: AAF*** ACTUAL FTE'S/TOTAL COSTS BY EMPL NAME PAGE: 1 SPR IDX: F**** FOR PERIOD 07/06 THRU 08/06 JOB/TASK: F****/F**** 0PROGRAM (F00) DEPARTMENT OF CONFUSION ACTUALS THRU 08/06 0SUPER EMPL ---- MONTHS 07/06 THRU 08/06 ------ ---------- BIENNIUM TO DATE ----------- INDEX NAME ID JOB TASK REG OT STAFF MO COST REG OT STAFF MO COST 0F1150 ABC, KELLY J. AAF113 FJO1A FTO5A 284.0 1.63 6,688.22 735.0 4.23 17,296.52 FJO1A FTO5D 38.0 .22 893.91 90.0 .52 2,128.73 FJO1A FTW5T 6.0 .03 135.07 6.0 .03 135.07 0 * ABC, KELLY J. AAF113 328.0 1.88 7,717.20 831.0 4.78 19,560.32 0 CDE, DEBORAH M. AAF103 FJB1A FTB5A 3.0 .02 107.83 3.0 .02 107.83 FJB1A FTB5B 21.5 .14 881.81 FJB1A FTB5D 5.5 .03 194.37 FJB1A FTB5G 5.5 .03 192.11 22.0 .11 790.06 FJB1A FTW5U 1.0 .01 41.20 FJG1N FTG5C 17.0 .11 700.26 FJG1N FTG5E 15.5 .09 557.19 15.5 .09 557.19 FJG1N FTW5A 1.0 35.95 1.0 35.95 FJG1N FTW5G 1.5 .01 61.79 FJG1N FTW5H 1.0 .01 41.20 FJG1N FTW5T 1.0 35.95 3.0 .01 118.34 FJG1N FTW5U 5.0 .03 205.96 FJG1Q FTG5C 2.0 .01 70.69 FJG1V FTG5E 64.0 .33 2,140.75 64.0 .33 2,140.75 FJG2A FTG5C 2.0 .01 70.69 FJG2A FTW5E 1.0 .01 41.20 FJG2A FTW5J 9.0 .05 370.75 FJG2A FTW5T 5.5 .03 197.72 5.5 .03 197.72 FJO1A FTO5D 219.0 1.14 7,587.85 432.0 2.34 15,578.73 FJO1A FTW5E 1.0 .01 41.20 FJO1A FTW5G 1.0 35.95 1.0 35.95 FJO1A FTW5T 65.5 .37 2,507.55 FJO1A FTW5U 3.0 .02 106.00 FJO1A FTW5V 34.5 .19 1,203.74 84.5 .49 3,103.17 FJO1A FTW5W 2.0 .01 66.30 6.0 .04 219.51 0 * CDE, DEBORAH M. AAF103 352.0 1.84 12,161.34 773.5 4.28 28,219.87 0 HIF, CRAIG AAF040 FJB1A FTB5B 145.0 .82 5,390.09 536.0 3.05 19,574.79 0 CMV, MARGARET S AAF070 FJB1A FTB5B 138.0 .86 4,259.44 FJG1N FTG5E 7.0 .04 191.76 FJG1N FTW5G 1.0 27.38 FJG1N FTW5V 1.0 27.38 FJG1Q FTG5E 2.0 .01 54.78 FJG1Q FTG5F 4.0 .02 109.56 FJG1Q FTW5B 1.0 .01 31.48 1SYSTEM: TMS1 STATE OF DISMAY DATE: 10/23/06 REPORT: B155A761 DEPARTMENT OF CONFUSION TIME: 15:05 EMPL ID: AAF*** ACTUAL FTE'S/TOTAL COSTS BY EMPL NAME PAGE: 2 SPR IDX: F**** FOR PERIOD 07/06 THRU 08/06 JOB/TASK: F****/F**** 0PROGRAM (F00) DEPARTMENT OF CONFUSION ACTUALS THRU 08/06 0SUPER EMPL ---- MONTHS 07/06 THRU 08/06 ------ ---------- BIENNIUM TO DATE ----------- INDEX NAME ID JOB TASK REG OT STAFF MO COST REG OT STAFF MO COST 0F1150 CMV, MARGARET S AAF070 FJG1Q FTW5G 9.0 .05 279.29 FJG1Q FTW5V 6.0 .03 180.76 0 * CMV, MARGARET S AAF070 169.0 1.02 5,161.83 0 PWC, CARL H. AAF049 FJG1B FTW5F 120.0 .71 4,226.34 324.0 1.86 10,868.58 0 LWR, KIM AAF104 FJO1A FTO5C 11.0 .06 422.18 FJO1A FTO5D 33.0 .19 1,363.92 127.5 .73 4,887.53 FJO1A FTW5E 5.0 .03 254.81 9.0 .05 403.18 FJO1A FTW5G 1.0 .01 37.08 I am looking to make the output file look like the following, which fills in the data holes.
082006 F1150 ABC, KELLY J. AAF113 FJO1A FTO5A 284.0 1.63 6,688.22 735.0 4.23 17,296.52
082006 F1150 ABC, KELLY J. AAF113 FJO1A FTO5D 38.0 .22 893.91 90.0 .52 2,128.73
082006 F1150 ABC, KELLY J. AAF113 FJO1A FTW5T 6.0 .03 135.07 6.0 .03 135.07
082006 CDE, DEBORAH M. AAF103 FJB1A FTB5A 3.0 .02 107.83 3.0 .02 107.83
082006 F1150 CDE, DEBORAH M. AAF103 FJB1A FTB5B 21.5 .14 881.81
082006 F1150 CDE, DEBORAH M. AAF103 FJB1A FTB5D 5.5 .03 194.37
082006 F1150 CDE, DEBORAH M. AAF103 FJB1A FTB5G 5.5 .03 192.11 22.0 .11 790.06
082006 F1150 CDE, DEBORAH M. AAF103 FJB1A FTW5U 1.0 .01 41.20
082006 F1150 CDE, DEBORAH M. AAF103 FJG1N FTG5C 17.0 .11 700.26
082006 F1150 CDE, DEBORAH M. AAF103 FJG1N FTG5E 15.5 .09 557.19 15.5 .09 557.19
082006 F1150 CDE, DEBORAH M. AAF103 FJG1N FTW5A 1.0 35.95 1.0 35.95
082006 F1150 CDE, DEBORAH M. AAF103 FJG1N FTW5G 1.5 .01 61.79
082006 F1150 CDE, DEBORAH M. AAF103 FJG1N FTW5H 1.0 .01 41.20
082006 F1150 CDE, DEBORAH M. AAF103 FJG1N FTW5T 1.0 35.95 3.0 .01 118.34
082006 F1150 CDE, DEBORAH M. AAF103 FJG1N FTW5U 5.0 .03 205.96
082006 F1150 CDE, DEBORAH M. AAF103 FJG1Q FTG5C 2.0 .01 70.69
082006 F1150 CDE, DEBORAH M. AAF103 FJG1V FTG5E 64.0 .33 2,140.75 64.0 .33 2,140.75
082006 F1150 CDE, DEBORAH M. AAF103 FJG2A FTG5C 2.0 .01 70.69
082006 F1150 CDE, DEBORAH M. AAF103 FJG2A FTW5E 1.0 .01 41.20
082006 F1150 CDE, DEBORAH M. AAF103 FJG2A FTW5J 9.0 .05 370.75
082006 F1150 CDE, DEBORAH M. AAF103 FJG2A FTW5T 5.5 .03 197.72 5.5 .03 197.72
082006 F1150 CDE, DEBORAH M. AAF103 FJO1A FTO5D 219.0 1.14 7,587.85 432.0 2.34 15,578.73
082006 F1150 CDE, DEBORAH M. AAF103 FJO1A FTW5E 1.0 .01 41.20
082006 F1150 CDE, DEBORAH M. AAF103 FJO1A FTW5G 1.0 35.95 1.0 35.95
082006 F1150 CDE, DEBORAH M. AAF103 FJO1A FTW5T 65.5 .37 2,507.55
082006 F1150 CDE, DEBORAH M. AAF103 FJO1A FTW5U 3.0 .02 106.00
082006 F1150 CDE, DEBORAH M. AAF103 FJO1A FTW5V 34.5 .19 1,203.74 84.5 .49 3,103.17
082006 F1150 CDE, DEBORAH M. AAF103 FJO1A FTW5W 2.0 .01 66.30 6.0 .04 219.51
082006 HIF, CRAIG AAF040 FJB1A FTB5B 145.0 .82 5,390.09 536.0 3.05 19,574.79
082006 CMV, MARGARET S AAF070 FJB1A FTB5B 138.0 .86 4,259.44
082006 F1150 CMV, MARGARET S AAF070 FJG1N FTG5E 7.0 .04 191.76
082006 F1150 CMV, MARGARET S AAF070 FJG1N FTW5G 1.0 27.38
####
open (IFILE,$pfile)||&log_it("Unable To Open Input File $pfile $!");
while (my $line=) {
$cnt = $cnt+1;
if (substr($line,0,7) eq "1SYSTEM") {
$header=1;
}
if ($header <=8) {
#skip the 8 lines of the header
$header = $header +1;
}
else {
if ($line=~/\x00/||$line=~/\x1A/||$line=~/\x2A/) {
#skip the lines that have the hex value of 00, 1A
#and skip the summary lines - marked with a *
$x=x;
}
#these lines will have usable data
else {
#take the first chunck of the line, which is the SIC, username and ID
#break it up into its components by making it pipe | delimited
$sub_line=substr($line,0,38);
$sub_line=~s/\s+\s+/\|/g;
#get the positions of the pipes
$a=index($sub_line,'|',1);
$b=index($sub_line,'|',8);
$c=index($sub_line,'|',20);
#assign the values
my $index=substr($sub_line,0,$a);
my $username=substr($sub_line,$a+1,$b-($a+1));
my $id=substr($sub_line,$b+1,$c-($b+1));
my $new_index;
#get rid of leading 0 in index value
$index=~s/^0//;
#print "start '$index' ($prev_user,$username): ";
# if the index code is 0 or blank, then use
# the last known SIC value, padded to 7 characters
if ($index eq '' ) {
$index=sprintf("%-*s",7,$prev_index);
#print "Null Index -> $index\n";
}
else {
$index=sprintf("%-*s",7,$index);
}
# if the username is blank then use the last
# known username value and pad it to 22 characters
# and use the last known user ID padded to 8 characters
if (trim($username) eq '') {
$username=sprintf("%-*s",22,$prev_user);
if ($id eq "") {
$id=sprintf("%-*s",8,$prev_id);
}
else {
$id=sprintf("%-*s",8,$prev_id);
}
# remove the initial white space from the "blank" lines
# then reconstruct the output line
$line=ltrim($line);
$line=~s/^0//;
$prev_user=$username;
$prev_index=$prev_index;
$prev_id=$id;
print OFILE $period." ".$index.$username.$id.$line
}
#if the index and username were filled in, the assign these values
#to the previous variables and print the record
else {
$line=~s/^0//;
$prev_user=$username;
$prev_index=$index;
#$prev_index=~s/^0//;
$prev_id=$id;
print OFILE $period." ".$line
}
}
}
} #end while loop