<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">#!/usr/bin/perl

package Arborescence ;

# v0.8rc1 Programme de Guillaume Lehmann. Programme sous licence GPL v3 (www.gnu.org).

#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#
#           DESSIN DE L'ARBORESCENCE                #
#       AU FORMAT TEXTE : Arborescence.txt          #
#        AU FORMAT DOT : Arborescence.dot           #
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#~~~~~~~~~~~~~~~~~~~~~#
# Pour générer le fichier image (ici Arborescence.jpeg), taper la commande#
# dot -Tjpg -oArborescence.jpeg Arborescence.dot                          #
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#



sub main {

# Récupération des identifiants pour accéder à la base de données.
    open(ACCESBD, 'AccesBD.txt') || die "Problème à&nbsp; l'accès au fichier AccesBD.txt" ;
    $resultat = &lt;ACCESBD&gt; ;
    close (ACCESBD) ;
    ($database, $hostname, $login, $password, $typBD) = $resultat =~ /^(\w*)\s*(\w*)\s*(\w*)\s*(\w*)\s*(\w*)\s*$/ ;
    $dsn = "DBI:$typBD:database=$database;host=$hostname" ;

# Connexion à&nbsp;la base de données.
    $dbh = DBI-&gt;connect($dsn, $login, $password) ;


###############################
## AFFICHAGE DE L'ARBORESCENCE

    open(ARBO, '&gt;Arborescence.txt') || die "!! Problème à l'ouverture du fichier d'arborescence\n" ;
    open(ARBODOT, '&gt;Arborescence.dot') || die "!! Problème à l'ouverture du fichier d'arborescence\n" ;
    
    # Création de l'en-tête du fichier .dot.
    print ARBODOT "digraph Architecture {\n" ;
#    print ARBODOT "size=\"200,20\" ;\n" ;
    print ARBODOT "node [color=lightblue2, style=filled] ;\n" ;
    

    # Préparation de la requête et exécution.
    $ResReq = $dbh-&gt;prepare("SELECT * FROM Conteneurs ORDER BY Cont_Niveau1 ASC, Cont_Niveau2 ASC, Cont_Niveau3 ASC, Cont_Niveau4 ASC, Cont_Niveau5 ASC ;") ;
    $ResReq-&gt;execute() ;
    
    while ($ResReqLign = $ResReq-&gt;fetchrow_hashref()) {
	# J'ai qqch du genre 10.0.0.0.0
	if ($ResReqLign-&gt;{'Cont_Niveau2'} == 0 &amp;&amp; $ResReqLign-&gt;{'Cont_Niveau3'} == 0 &amp;&amp; $ResReqLign-&gt;{'Cont_Niveau2'} == 0 &amp;&amp; $ResReqLign-&gt;{'Cont_Niveau2'} == 0) {
	    print ARBO "-- $ResReqLign-&gt;{'Cont_Niveau1'}:$ResReqLign-&gt;{'Cont_Niveau2'}:$ResReqLign-&gt;{'Cont_Niveau3'}:$ResReqLign-&gt;{'Cont_Niveau4'}:$ResReqLign-&gt;{'Cont_Niveau5'} ==&gt; $ResReqLign-&gt;{'Cont_Nom'}\n" ;
	}
	# J'ai qqch du genre 10.5.0.0.0
	elsif ($ResReqLign-&gt;{'Cont_Niveau3'} == 0) {
	    print ARBO "  |__ $ResReqLign-&gt;{'Cont_Niveau1'}:$ResReqLign-&gt;{'Cont_Niveau2'}:$ResReqLign-&gt;{'Cont_Niveau3'}:$ResReqLign-&gt;{'Cont_Niveau4'}:$ResReqLign-&gt;{'Cont_Niveau5'} ==&gt; $ResReqLign-&gt;{'Cont_Nom'}\n" ;
	    # Trouver le père du conteneur.
	    $ResReqPere = $dbh-&gt;prepare("SELECT * FROM Conteneurs WHERE Cont_Niveau1 = $ResReqLign-&gt;{'Cont_Niveau1'} AND Cont_Niveau2 = 0 ;") ;
	    $ResReqPere-&gt;execute() ;
	    $ResReqPereLign = $ResReqPere-&gt;fetchrow_hashref() ;
	    print ARBODOT "\"$ResReqLign-&gt;{'Cont_Nom'}\" -&gt; \"$ResReqPereLign-&gt;{'Cont_Nom'}\" ;\n" ;
	}
	# J'ai qqch du genre 10.5.2.0.0
	elsif ($ResReqLign-&gt;{'Cont_Niveau4'} == 0) {
	    print ARBO "    |__ $ResReqLign-&gt;{'Cont_Niveau1'}:$ResReqLign-&gt;{'Cont_Niveau2'}:$ResReqLign-&gt;{'Cont_Niveau3'}:$ResReqLign-&gt;{'Cont_Niveau4'}:$ResReqLign-&gt;{'Cont_Niveau5'} ==&gt; $ResReqLign-&gt;{'Cont_Nom'}\n" ;
	    $ResReqPere = $dbh-&gt;prepare("SELECT * FROM Conteneurs WHERE Cont_Niveau1 = $ResReqLign-&gt;{'Cont_Niveau1'} AND Cont_Niveau2 = $ResReqLign-&gt;{'Cont_Niveau2'} AND Cont_Niveau3 = 0 ;") ;
	    $ResReqPere-&gt;execute() ;
	    $ResReqPereLign = $ResReqPere-&gt;fetchrow_hashref() ;
	    print ARBODOT "\"$ResReqLign-&gt;{'Cont_Nom'}\" -&gt; \"$ResReqPereLign-&gt;{'Cont_Nom'}\" ;\n" ;
	}
	# J'ai qqch du genre 10.5.2.4.0
	elsif ($ResReqLign-&gt;{'Cont_Niveau5'} == 0) {
	    print ARBO "      |__ $ResReqLign-&gt;{'Cont_Niveau1'}:$ResReqLign-&gt;{'Cont_Niveau2'}:$ResReqLign-&gt;{'Cont_Niveau3'}:$ResReqLign-&gt;{'Cont_Niveau4'}:$ResReqLign-&gt;{'Cont_Niveau5'} ==&gt; $ResReqLign-&gt;{'Cont_Nom'}\n" ;
	    $ResReqPere = $dbh-&gt;prepare("SELECT * FROM Conteneurs WHERE Cont_Niveau1 = $ResReqLign-&gt;{'Cont_Niveau1'} AND Cont_Niveau2 = $ResReqLign-&gt;{'Cont_Niveau2'} AND Cont_Niveau3 = $ResReqLign-&gt;{'Cont_Niveau3'} AND Cont_Niveau4 = 0 ;") ;
	    $ResReqPere-&gt;execute() ;
	    $ResReqPereLign = $ResReqPere-&gt;fetchrow_hashref() ;
	    print ARBODOT "\"$ResReqLign-&gt;{'Cont_Nom'}\" -&gt; \"$ResReqPereLign-&gt;{'Cont_Nom'}\" ;\n" ;
	}
	# J'ai qqch du genre 10.5.2.4.2
	elsif ($ResReqLign-&gt;{'Cont_Niveau5'} == 0) {
	    print ARBO "        |__ $ResReqLign-&gt;{'Cont_Niveau1'}:$ResReqLign-&gt;{'Cont_Niveau2'}:$ResReqLign-&gt;{'Cont_Niveau3'}:$ResReqLign-&gt;{'Cont_Niveau4'}:$ResReqLign-&gt;{'Cont_Niveau5'} ==&gt; $ResReqLign-&gt;{'Cont_Nom'}\n" ;
	    $ResReqPere = $dbh-&gt;prepare("SELECT * FROM Conteneurs WHERE Cont_Niveau1 = $ResReqLign-&gt;{'Cont_Niveau1'} AND Cont_Niveau2 = $ResReqLign-&gt;{'Cont_Niveau2'} AND Cont_Niveau3 = $ResReqLign-&gt;{'Cont_Niveau3'} AND Cont_Niveau4 = $ResReqLign-&gt;{'Cont_Niveau4'} AND Cont_Niveau5 = 0 ;") ;
	    $ResReqPere-&gt;execute() ;
	    $ResReqPereLign = $ResReqPere-&gt;fetchrow_hashref() ;
	    print ARBODOT "\"$ResReqLign-&gt;{'Cont_Nom'}\" -&gt; \"$ResReqPereLign-&gt;{'Cont_Nom'}\" ;\n" ;
	}
    } # Fin du "while ($ResReqLign = $ResReq-&gt;fetchrow_hashref())"


# Fermeture de tout dans la BD.
    $ResReq-&gt;finish();
    $ResReqPere-&gt;finish() ;
    $dbh-&gt;disconnect ;

    # Fin du fichier .dot.
    print ARBODOT "}" ;
    close (ARBODOT) ;

    close(ARBO) ;
###############################

} # fin sub main
1;
</pre></body></html>