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