Arborescence et extraction fichier txt
ll44
-
ll44 -
ll44 -
Bonjour,
Je cherche à parcourir les répertoires et sous répertoires d'un dossier racine.
Mon arborescence est de la forme init/fiche_x/format_x
Dans chaque dossier format_x j'ai un fichier .txt toujours nommé de la même façon et plusieurs fichiers .jpg. Le fichier .txt contient une ligne concernant chacun des fichiers .jpg (nom_image.jpg ;valeur1;valeur2) .
Je voudrais extraire les données de ce fichier .txt et en parcourant de nouveau le contenu de ce même répertoire parent extraire la taille de l'image puis insérer dans un nouveau fichier .csv les données suivantes : nom_image.jpg ;valeur1;valeur2;taille_image;chemin depuis la racine /init. Et ce pour l'ensemble des fichiers images contenus dans les répertoires et sous-répertoires.
J'ai donc fait un programme php qui parcourt les répertoires, puis:
-si le fichier trouvé est un .txt alors on extrait son contenu (nom_image.jpg ;valeur1;valeur2)
-si le fichier trouvé est .jpg alors on extrait les propriétés de taille( longueur/largeur)
Je pense qe je m'y suis mal pris et que dans la boucle qui parcourt l'arborescence je dois chercher un fichier.txt puis reparcourir ce même dossier à la recherche de nom_image.jpg se trouvant dans le même dossier que le txt. mais je ne vois pas bien comment faire cette boucle dans la boucle...Il faut rester au même niveau de l'arborecence...
Ci-dessous mon code:
function listingDir($path, $ext_interdites, $dir_interdits , $file_interdits, $profondeur=9999, $profdep=0 ) {
if (is_dir($path)) {
if (substr($path, -1, 1) !=chr(92)) {
$path .= chr(92);
echo $path.'<br>';
}
}
//on compte le nb de / au lancement
if ($profdep == 0) {
$profdep= substr_count($path, chr(92));
}
if (is_dir($path)) {
//on definit le nom du dossier à afficher
if (substr($path, -1, 1) ==chr(92)) { //si ça finit par un slash on le supprime pour avoir le nom du dossier
$dirnam = substr($path, 0,(strlen($path)-1)); //on vire le dernier shash
} else {
$dirnam = substr($path, 0,(strlen($path))); //on garde le nom du dossier comme ça
$path.= chr(92); // on ajoute un slash a la fin du path
}
$dirnam = strrchr($dirnam, chr(92)); // on recupere le nom du dernier dossier
//$dirnam = str_replace (array('/'), array(''), $dirnam); // on vire le 1er shash
$dirnam = str_replace (array(chr(92)), array(''), $dirnam);
//echo 'yo='.$dirnam ;
//echo '<br />';
if(!in_array($dirnam, $dir_interdits)) { //on verifie que le dossier fait pas partie des interdits
if ($dh = @opendir($path)) {
while (($file = readdir($dh)) !== false) { //readdir(dir_handle) retourne le nom du fichier suivant dans le dossier identifié par dir_handle
if (($file != '.') && ($file != '..') && ($file != '...')) { //Liste de tous les fichiers dans le répertoire courant et enlève les . et .. etc.
if (is_dir($path . $file)) //retourne TRUE si filename existe et est un dossier.
{
if (substr_count($path . $file, chr(92))-$profdep < $profondeur)
{
listingDir(($path . $file . chr(92)), $ext_interdites, $dir_interdits, $file_interdits, $profondeur, $profdep);
}
}
else //si c'est un fichier
{
//on prend l'extension et le nom du fichier
$tabfile = explode('.', $file);
$extfi = $tabfile[sizeof($tabfile)-1];
$nomfile = basename($file, $extfi);
if(!in_array($extfi, $ext_interdites) && !in_array($file, $file_interdits)) {
echo "$path$file"."\n".'<br>'; // A ECRIRE DANS LE .CSV
echo "$file".'<br>'; // A ECRIRE DANS LE .CSV
$path2=$path.$file;
if (substr($path2,strlen($path2)-3,3)=="jpg" || substr($path2,strlen($path2)-3,3)=="gif"|| substr($path2,strlen($path2)-3,3)=="bmp" || substr($path2,strlen($path2)-3,3)=="png" ){
$Size = getimagesize($path2);
if (!empty($Size[0]) and !empty($Size[1])){
echo 'largeur:'.$Size[0].'<br>'; // A ECRIRE DANS LE .CSV
echo 'longueur:'.$Size[1].'<br>'; // A ECRIRE DANS LE .CSV
}
}
if (substr($path2, -3, 3) =='txt') {
$leg='';// declaration variable $leg
$val1='';// declaration variable $val1
$val2='';// declaration variable $val2
$fp=fopen($path2,'r');// ouverture du fichier en lecture seule - pointeur au début du fichier
while (!feof($fp)) {
$position=explode(" / ",fgets($fp));// lecture et decoupage des lignes à chaque "/"
$nom=$position[0];//$position dans la ligne commence à zero
//echo 'val1:'.$val1.'<br>'."\n";
$leg=$position[1];
//echo 'leg:'.$leg.'<br>';
$val2=$position[2];
//echo 'val2:'.$val2.'<br>';
}
fclose($fp);// fermeture du fichier
}
}
}
}
}
closedir($dh);
echo '</div>'."\n";
}
}
}elseif (is_file($path)) {
echo $path.'<br>';
}
}
listingDir('C:\test\', array('sql', 'db'), array('css', 'admin'), array('config.php', 'config.inc.php'), 3);
Merci par avance à ceux qui auraient quelques idées.
LL44
Je cherche à parcourir les répertoires et sous répertoires d'un dossier racine.
Mon arborescence est de la forme init/fiche_x/format_x
Dans chaque dossier format_x j'ai un fichier .txt toujours nommé de la même façon et plusieurs fichiers .jpg. Le fichier .txt contient une ligne concernant chacun des fichiers .jpg (nom_image.jpg ;valeur1;valeur2) .
Je voudrais extraire les données de ce fichier .txt et en parcourant de nouveau le contenu de ce même répertoire parent extraire la taille de l'image puis insérer dans un nouveau fichier .csv les données suivantes : nom_image.jpg ;valeur1;valeur2;taille_image;chemin depuis la racine /init. Et ce pour l'ensemble des fichiers images contenus dans les répertoires et sous-répertoires.
J'ai donc fait un programme php qui parcourt les répertoires, puis:
-si le fichier trouvé est un .txt alors on extrait son contenu (nom_image.jpg ;valeur1;valeur2)
-si le fichier trouvé est .jpg alors on extrait les propriétés de taille( longueur/largeur)
Je pense qe je m'y suis mal pris et que dans la boucle qui parcourt l'arborescence je dois chercher un fichier.txt puis reparcourir ce même dossier à la recherche de nom_image.jpg se trouvant dans le même dossier que le txt. mais je ne vois pas bien comment faire cette boucle dans la boucle...Il faut rester au même niveau de l'arborecence...
Ci-dessous mon code:
function listingDir($path, $ext_interdites, $dir_interdits , $file_interdits, $profondeur=9999, $profdep=0 ) {
if (is_dir($path)) {
if (substr($path, -1, 1) !=chr(92)) {
$path .= chr(92);
echo $path.'<br>';
}
}
//on compte le nb de / au lancement
if ($profdep == 0) {
$profdep= substr_count($path, chr(92));
}
if (is_dir($path)) {
//on definit le nom du dossier à afficher
if (substr($path, -1, 1) ==chr(92)) { //si ça finit par un slash on le supprime pour avoir le nom du dossier
$dirnam = substr($path, 0,(strlen($path)-1)); //on vire le dernier shash
} else {
$dirnam = substr($path, 0,(strlen($path))); //on garde le nom du dossier comme ça
$path.= chr(92); // on ajoute un slash a la fin du path
}
$dirnam = strrchr($dirnam, chr(92)); // on recupere le nom du dernier dossier
//$dirnam = str_replace (array('/'), array(''), $dirnam); // on vire le 1er shash
$dirnam = str_replace (array(chr(92)), array(''), $dirnam);
//echo 'yo='.$dirnam ;
//echo '<br />';
if(!in_array($dirnam, $dir_interdits)) { //on verifie que le dossier fait pas partie des interdits
if ($dh = @opendir($path)) {
while (($file = readdir($dh)) !== false) { //readdir(dir_handle) retourne le nom du fichier suivant dans le dossier identifié par dir_handle
if (($file != '.') && ($file != '..') && ($file != '...')) { //Liste de tous les fichiers dans le répertoire courant et enlève les . et .. etc.
if (is_dir($path . $file)) //retourne TRUE si filename existe et est un dossier.
{
if (substr_count($path . $file, chr(92))-$profdep < $profondeur)
{
listingDir(($path . $file . chr(92)), $ext_interdites, $dir_interdits, $file_interdits, $profondeur, $profdep);
}
}
else //si c'est un fichier
{
//on prend l'extension et le nom du fichier
$tabfile = explode('.', $file);
$extfi = $tabfile[sizeof($tabfile)-1];
$nomfile = basename($file, $extfi);
if(!in_array($extfi, $ext_interdites) && !in_array($file, $file_interdits)) {
echo "$path$file"."\n".'<br>'; // A ECRIRE DANS LE .CSV
echo "$file".'<br>'; // A ECRIRE DANS LE .CSV
$path2=$path.$file;
if (substr($path2,strlen($path2)-3,3)=="jpg" || substr($path2,strlen($path2)-3,3)=="gif"|| substr($path2,strlen($path2)-3,3)=="bmp" || substr($path2,strlen($path2)-3,3)=="png" ){
$Size = getimagesize($path2);
if (!empty($Size[0]) and !empty($Size[1])){
echo 'largeur:'.$Size[0].'<br>'; // A ECRIRE DANS LE .CSV
echo 'longueur:'.$Size[1].'<br>'; // A ECRIRE DANS LE .CSV
}
}
if (substr($path2, -3, 3) =='txt') {
$leg='';// declaration variable $leg
$val1='';// declaration variable $val1
$val2='';// declaration variable $val2
$fp=fopen($path2,'r');// ouverture du fichier en lecture seule - pointeur au début du fichier
while (!feof($fp)) {
$position=explode(" / ",fgets($fp));// lecture et decoupage des lignes à chaque "/"
$nom=$position[0];//$position dans la ligne commence à zero
//echo 'val1:'.$val1.'<br>'."\n";
$leg=$position[1];
//echo 'leg:'.$leg.'<br>';
$val2=$position[2];
//echo 'val2:'.$val2.'<br>';
}
fclose($fp);// fermeture du fichier
}
}
}
}
}
closedir($dh);
echo '</div>'."\n";
}
}
}elseif (is_file($path)) {
echo $path.'<br>';
}
}
listingDir('C:\test\', array('sql', 'db'), array('css', 'admin'), array('config.php', 'config.inc.php'), 3);
Merci par avance à ceux qui auraient quelques idées.
LL44
A voir également:
- Arborescence et extraction fichier txt
- Fichier bin - Guide
- Fichier epub - Guide
- Fichier rar - Guide
- Comment réduire la taille d'un fichier - Guide
- Fichier .dat - Guide