GrandFather has asked for the wisdom of the Perl Monks concerning the following question:
I've been batting this problem around on and off for a week without making in useful progress. I have a script that parses trace output from a device and pulls out a series of 'from -> to' connection descriptions that I would like to present as a connection graph.
The current code prints the connection descriptions thus:
'TAvi' (-37) -> 'TDMk' (-32) 'TAvi' (-38) -> 'TMrk' (-34) 'TDMk' (-32) -> xfer (-12) 'TDif' (-7) -> xfer (-11) 'TDif' (-8) -> 'TMCF' (-35) 'TDig' (-27) -> 'TSpN' (-33) 'TLCI' (-36) -> 'TAvi' (-37) 'TMCF' (-35) -> 'TLCI' (-36) 'TMrk' (-34) -> xfer (-28) 'TSpN' (-33) -> 'TAvi' (-38) 'TSpN' (-33) -> 'TDMk' (-32) 'TSpN' (-33) -> 'TMCF' (-35)
By playing around by hand I can rearange that to show the inputs (TDif and TDig) to outputs (xfer) flow as:
'TDif' (-7) -> xfer (-11) 'TDif' (-8) -> 'TMCF' (-35) -> 'TLCI' (-36) -> 'TAvi' (-37) -> 'TDMk' +(-32) -> xfer (-12) ^-----------v-----------------------------------^ 'TDig' (-27) -> 'TSpN' (-33) -> 'TAvi' (-38) -> 'TMrk' (-34) -> xfer ( +-28)
Note that there can be coupling between streams (as shown from 'TSpN' (-33) to two places in the 'TDif' (-8) to xfer (-12) stream), but no loops.
What I've not been able to get my head around is generating some equivelent diagram programaticly. Are there modules around to help with this sort of graphing problem, or is there a way of representing the data that makes the graph "easy" to generate?
At present my internal data format is best represented by @splitLines in the following code fragment (assuming the data shown above is in a __DATA__ section):
use warnings; use strict; my @lines = <DATA>; my @splitLines = map {[/('....')..([-\d]*)\) -> ('?....'?)..([-\d]*)/] +} @lines; print "$_->[0] ($_->[1]) -> $_->[2] ($_->[3])\n" for @splitLines;
This simply reproduces the data above in the same form having parsed it.
In general there are likely to be up to a couple of hundred data lines with up to 17 inputs and 17 outputs.
I appologise for not presenting any half working code. My efforts so far have been less than useful. Hints for solving this problem will be greatly appreciated!
DWIM is Perl's answer to Gödel
|
---|
Replies are listed 'Best First'. | |
---|---|
Re: How to print/draw a network graph
by blokhead (Monsignor) on Jun 29, 2006 at 05:59 UTC | |
by GrandFather (Saint) on Jun 30, 2006 at 02:21 UTC | |
by GrandFather (Saint) on Jun 29, 2006 at 09:31 UTC | |
Re: How to print/draw a network graph
by terce (Friar) on Jun 29, 2006 at 06:49 UTC | |
Re: How to print/draw a network graph
by GrandFather (Saint) on Jun 29, 2006 at 10:32 UTC | |
by Anonymous Monk on Oct 14, 2009 at 15:53 UTC | |
by GrandFather (Saint) on Oct 14, 2009 at 20:31 UTC | |
Re: How to print/draw a network graph
by planetscape (Chancellor) on Jun 30, 2006 at 16:27 UTC |