Structuration de chemins de dossiers en hiérarchie
Bonjour,
Je dispose d'un fichier d'entrée qui contient des chemins de dossiers par lignes :
Code:
1 2 3 4 5
|
Dossier1/Dossier2/Dossier3
Dossier1/Dossier2/Dossier4
Dossier1/Dossier2/Dossier4/Dossier5
Dossier1/Dossier2/Dossier4/Dossier6 |
Je souhaiterais créer un fichier de sortie qui mette en forme hérarchique le fichier d'entrée de cette forme :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
|
- <folder>Dossier1
- <folder>Dossier2
- <folder>Dossier3
</folder>
- <folder>Dossier4
* <folder>Dossier5
</folder>
* <folder>Dossier6
</folder>
</folder>
</folder>
- </folder> |
J'ai commencé à coder (pas très optimisé) mais ça ne donne pas ce que je veux mais le principal est la :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
|
//Parcours du fichier pour remise en forme
$fichier = fopen("fichier_entree.txt", "w" ); //Fichier pour écriture
$tableau = file("fichier_sortie.txt"); //Fichier pour lecteure stocké dans un tableau
if(is_array($tableau)) //Si la variable $tableau est bien un tableau, on peut continuer
{
$contenu_fichier = '';
$temp_derniere_colonne = '';
$chemin_sans_dernier_dossier_precedent = '';
foreach($tableau AS $ligne)
{
$nb_colonnes_tableau = substr_count($ligne,"/") + 1; //Nombre de slash dans la ligne puis + 1 = Nombre de colonnes dans le tableau
$tableau = split("/",$ligne);
//On récupère le chemin sans le dernier dossier
$chemin_sans_dernier_dossier = '';
for ($i=0;$i < $nb_colonnes_tableau-1;$i++)
{
$chemin_sans_dernier_dossier .= $tableau[$i].'/';
if ($chemin_sans_dernier_dossier == $chemin_sans_dernier_dossier_precedent)
{
}else{
fputs($fichier,'???');
fputs($fichier,"\n");
}
}
$num_derniere_colonne = $nb_colonnes_tableau - 1; // On récupère le numéro de la dernière colonne du tableau et -1 car on commence à 0
fputs($fichier,' <folder>'.$tableau[$num_derniere_colonne].'');
fputs($fichier,"\n");
fputs($fichier,' </folder>');
fputs($fichier,"\n");
//Vérification que l'avant dernière colonne existe et qu'il n'y en a pas qu'une seule
if ($tableau[$num_derniere_colonne] > 1)
{
$temp_derniere_colonne = $tableau[$num_derniere_colonne-1]; //On stock l'avant dernière colonne dans une variable temporaire pour la comparer par la suite
}
$chemin_sans_dernier_dossier_precedent = $chemin_sans_dernier_dossier;
}
}
fclose($fichier); |
Si quelqu'un peut m'aider je lui en serais reconnaissant merci :king: