Skip to main content

WebFOCUS Impact Analysis report compactor

Reading time: 2 minutes Suggest an edit

Here's a little script I whipped up to combine several Impact Analysis reports generated by WebFOCUS Developer Studio. The script opens HTM-formatted IA reports, skims the data, and then concatenates it all in one CSV-formatted output block.

PHP code:

Program: Impact Analysis Compactor
Author: haliphax
Date: 2009/8/7
Changed: Never
Purpose: Takes multiple Impact Analysis Reports from WebFOCUS Developer
Studio and combines them into one CSV-formatted output block.
Notes: Only reads HTM-formatted IA reports. *.IAR are not recognized.
Usage: php iarcompactor.php > output.csv

# grab list of Impact Analysis reports
$files = glob('*.htm');

# cycle through reports
foreach($files as $file)
	# grab HTML and parse out table rows
	$html = file_get_contents($file);
	preg_match_all('#<tr[^>]*>.+?</tr>#i', $html, $matches);
	$cnt = count($matches[0]);
	$reports = array();

	# iterate through table rows, skipping header
	for($a = 1; $a < $cnt; $a++)
		# parse out table cells
		preg_match_all('#<td[^>]*>(.+?)</td>#i', $matches[0][$a], $fields);
		# assign field variables
		$report = $fields[1][0];
		$folder = $fields[1][1];
		$usage = $fields[1][2];
		$domain = $fields[1][3];
		$line = $fields[1][4];
		$description = $fields[1][5];
		$comments = $fields[1][6];
		# build arrays if they don't already exist
		if(! is_array($reports[$domain]))
			$reports[$domain] = array();
		if(! is_array($reports[$domain][$folder]))
			$reports[$domain][$folder] = array();
		# make the "line numbers" list pretty with commmas
		if(strlen($reports[$domain][$folder][$report] > 0))
			$reports[$domain][$folder][$report] .= ', ';
		# record line number
		$reports[$domain][$folder][$report] .= $line;

	# sort final report (doesn't work so great, need to re-sort in Excel)
	foreach($reports as $kd => $domain)
		foreach($domain as $kf => $folder)

	# output to csv
	foreach($reports as $domain => $domainArray)
		foreach($domainArray as $folder => $folderArray)
			foreach($folderArray as $report => $lines)
				echo "\"{$domain}\",\"{$folder}\",\"{$report}\","
					. "\"{$lines}\"" . PHP_EOL;

Currently, nothing is being done with several of the fields–though that should be easy enough to modify now that you have the source.