Beefy Boxes and Bandwidth Generously Provided by pair Networks
laziness, impatience, and hubris

comment on

( #3333=superdoc: print w/replies, xml ) Need Help??

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

In reply to How to print/draw a network graph by GrandFather

Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post; it's "PerlMonks-approved HTML":

  • Are you posting in the right place? Check out Where do I post X? to know for sure.
  • Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
    <code> <a> <b> <big> <blockquote> <br /> <dd> <dl> <dt> <em> <font> <h1> <h2> <h3> <h4> <h5> <h6> <hr /> <i> <li> <nbsp> <ol> <p> <small> <strike> <strong> <sub> <sup> <table> <td> <th> <tr> <tt> <u> <ul>
  • Snippets of code should be wrapped in <code> tags not <pre> tags. In fact, <pre> tags should generally be avoided. If they must be used, extreme care should be taken to ensure that their contents do not have long lines (<70 chars), in order to prevent horizontal scrolling (and possible janitor intervention).
  • Want more info? How to link or or How to display code and escape characters are good places to start.
Log In?

What's my password?
Create A New User
Domain Nodelet?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others avoiding work at the Monastery: (5)
As of 2022-05-25 13:42 GMT
Find Nodes?
    Voting Booth?
    Do you prefer to work remotely?

    Results (90 votes). Check out past polls.