Skip to main content
I'm streaming on Twitch right now. You should stop by. Let's go!

WebFOCUS Impact Analysis report compactor


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.