"); print ('Motorclothes Summary Report'); } function initializeNewGroup($category, &$groupControl, &$groupOut) { // & means passing by reference $groupControl = $category; $groupOut = $category; $groupTotal = 0.00; // reset group accumulator return $groupTotal; } function printControlFooting($groupControl, $total) { $total = sprintf("%7.2f",$total); print ("$groupControl:" . "$total"); //print (" "); } function printFinalFooting($grandTotal) { $grandTotal = sprintf("%7.2f",$grandTotal); print("Grand total$grandTotal"); print(""); } // main $fp = fopen("motoclozG.txt", "r"); $grandTotal = 0.00; printReportHeading(); $lineIn = fgets($fp); // primer input while ( !feof($fp) ) { $category = substr($lineIn, 30, 11); // extract control field(category) $groupTotal = initializeNewGroup($category, $groupControl, $groupOut); while ($category == $groupControl) { // process one group $price = substr($lineIn, 41, 6); $groupTotal += $price; $lineIn = fgets($fp); // get next record(line) $category = substr($lineIn, 30, 11); // extract control field } // end inner loop $grandTotal += $groupTotal; printControlFooting($groupControl, $groupTotal); $groupTotal = initializeNewGroup($category, $groupControl, $groupOut); } // end outer loop printFinalFooting($grandTotal); fclose($fp); ?>