1SYSTEM: TMS1 STATE OF DISMA +Y DATE: 10/23/06 REPORT: B155A761 DEPARTMENT OF C +ONFUSION TIME: 15:05 EMPL ID: AAF*** ACTUAL FTE'S/TOTAL COST +S BY EMPL NAME PAGE: 1 SPR IDX: F**** FOR PERIOD 07/06 T +HRU 08/06 JOB/TASK: F****/F**** 0PROGRAM (F00) DEPARTMENT OF CONFUSION + ACTUALS THRU 08/06 0SUPER EMPL ---- MONTHS 07/0 +6 THRU 08/06 ------ ---------- BIENNIUM TO DATE ----------- INDEX NAME ID JOB TASK REG OT ST +AFF 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 DISMA +Y DATE: 10/23/06 REPORT: B155A761 DEPARTMENT OF C +ONFUSION TIME: 15:05 EMPL ID: AAF*** ACTUAL FTE'S/TOTAL COST +S BY EMPL NAME PAGE: 2 SPR IDX: F**** FOR PERIOD 07/06 T +HRU 08/06 JOB/TASK: F****/F**** 0PROGRAM (F00) DEPARTMENT OF CONFUSION + ACTUALS THRU 08/06 0SUPER EMPL ---- MONTHS 07/0 +6 THRU 08/06 ------ ---------- BIENNIUM TO DATE ----------- INDEX NAME ID JOB TASK REG OT ST +AFF 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 </pre> I am looking to make the output file look like the following, which fi +lls in the data holes. <pre> 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=<IFILE>) { $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 S +IC, 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 charac +ters 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 charac +ters # and use the last known user ID padded to 8 c +haracters 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 "bla +nk" 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 recor +d else { $line=~s/^0//; $prev_user=$username; $prev_index=$index; #$prev_index=~s/^0//; $prev_id=$id; print OFILE $period." ".$line } } } } #end while loop
Edited (davorg): replaced pre tags with code tags
In reply to file parsing help by ctaustin
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |