Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1793 connectés 

  FORUM HardWare.fr
  Programmation
  Divers

  Programme de tri de fichier

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Programme de tri de fichier

n°2171335
lodou
Posté le 15-01-2013 à 15:37:04  profilanswer
 

Bonjour, je dispose de plus de 5000 fichier pdf et chacun d'entre-eux porte un nom spécifique avec à chaque fois un numéro commun à plus fichiers ( numéro propriétaire ).
 
Je souhaites que les fichiers avec le même numéro propriétaire soit envoyé vers un dossier avec ce même numéro.
 
si quelqu'un connait une application déjà existante qui fait ce travail la, ou si quelqu'un sais avec quoi et/ou comment programmer une application de ce type, je suis ouvert à toutes informations.

mood
Publicité
Posté le 15-01-2013 à 15:37:04  profilanswer
 

n°2171350
Profil sup​primé
Posté le 15-01-2013 à 16:20:40  answer
 

Bonjour,
Sur quel système d'exploitation ?

n°2171357
lodou
Posté le 15-01-2013 à 16:39:01  profilanswer
 

bonjour,  
soit sur du windows seven ou xp voir meme sur un serveur 2008 mais sur du windows en tout cas :)


Message édité par lodou le 15-01-2013 à 16:39:49
n°2171366
Profil sup​primé
Posté le 15-01-2013 à 18:09:17  answer
 

Bien sur, l'id user et séparé du nom du fichier par un caractère ne pouvant exister ailleurs dans la chaîne du nom effectif des fichier ?

n°2171373
gilou
Modérateur
Modzilla
Posté le 15-01-2013 à 19:34:16  profilanswer
 

C'est quelques lignes de Perl, ça.
Avec une regexp bien faite sur le nom de fichier, et un move dans le répertoire ad-hoc, créé s'il n'existe pas.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2171427
lodou
Posté le 16-01-2013 à 09:18:06  profilanswer
 

Bonjour,  
je viens vous rajouter quelques précision, car je n'avais pas tout les éléments en main hier.
 
Déjà, le nom des fichiers et du type: avis_210536_012010. Le numéro entre crochet correspond au numéro qui servira à faire le tri ( ce numéro peut changer ne fonction du propriétaire ).
Ensuite, le tri sera principalement effectué pour un site sous joomla.
 
Dans ce site, lorsqu'un utilisateur va se connecter, il va être identifier par un numéro qui correspond au numéro entre les _.  
Une fois connecté l'utilisateur aura une arborescence dans laquelle les fichier comportant son numéro seront affichés.
 
Pour le moment, il faut que je trouve un moyen qui va me permettre de trier les fichier par nom dans des dossier comportant leur propre nom.
 
Je peut directement coder sur le site ou créer un programme qui triera les fichiers.


Message édité par lodou le 16-01-2013 à 09:28:45
n°2171471
gilou
Modérateur
Modzilla
Posté le 16-01-2013 à 12:16:41  profilanswer
 

Tous tes fichiers sont dans le même répertoire au départ?
Les dossiers ou tu dois les ranger ont quel nom? le numéro identifiant le propriétaire ou le nom du propriétaire? Et dans ce dernier cas, d'ou sort la correspondance identifiant - nom?
 
En tout cas le principe est pas compliqué:
En supposant tes fichiers dans le même répertoire au départ.
1) tu récupère la liste des noms de fichier  
2) pour chaque fichier de la liste, tu extrait l'identifiant du milieu avec une expression régulière ad-hoc, et tu fais un move (ou une copie, selon tes besoins) de ce fichier vers le répertoire associé à ton identifiant (ou au nom qui lui est associé), répertoire que tu crées auparavant s'il n'existe pas.
 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2171492
lodou
Posté le 16-01-2013 à 13:52:34  profilanswer
 

Tous les fichiers sont dans le même dossier.
Les dossier dans lesquels je doit ranger les fichier possède comme nom le numéro propriétaire qui est sur les fichiers et qui diffère selon le fichiers.

 

Pour le développement, si je pouvais avoir plus de précisions, car je suis assez novices dans le domaine surtout en perl que je n'ai jamais fait, cela va faire plus de 1 ans que je n'ai pas fait de développement et ou je n'avais que de petite bases.

 

Et ensuite, les dossier de réception seront créer sur un serveur distant et les fichiers qui seront à déplacer devront être envoyé via ftp.


Message édité par lodou le 16-01-2013 à 14:01:13
n°2171517
gilou
Modérateur
Modzilla
Posté le 16-01-2013 à 15:47:49  profilanswer
 

La vous avez toutes les billes. Vous pouvez écrire cela en perl, python, ruby, ou tout autre langage un peu moderne qui sait maniper les systèmes de fichier,les expression régulières et utiliser une liaison ftp.
 
En perl ce serait qque chose comme:

Code :
  1. #!/usr/bin/perl
  2. use v5.10.1;
  3. # code propre
  4. use strict;
  5. use warnings;
  6. use autodie;
  7.  
  8. # my $dir = '/.../.../'; #mettre le répertoire correct ici
  9. my $dir = '.';
  10. #my $name_pattern = "avis_(\d+)_\d+";
  11. opendir(my $dh, $dir);
  12. my @files = grep { -f "$dir/$_" } readdir($dh); # on récupère laliste des fichiers
  13. closedir($dh);
  14.  
  15. my %transfer;
  16. foreach (@files) {
  17.  if (/^avis_(\d+)_\d+$/) { # si nom du fichier est 'avis_chiffres_chiffres'
  18.    if (defined $transfer{$1}) {
  19.      push $transfer{$1}, $_;
  20.    } else {
  21.      $transfer{$1} = [$_];
  22.    }
  23.  }
  24. }
  25.  
  26.  
  27.  
  28. use Net::FTP;
  29. my $remote_dir = '/.../.../'; #mettre le répertoire correct ici
  30. my ($domain, $username, $password) = ("some.host.name", "mylogin", "mypasswd" ); #idem pour les infos
  31. my $ftp = Net::FTP->new($domain, Debug => 0) or die "Cannot connect to $domain: $@";
  32. $ftp->login($username, $password) or die "Cannot login ", $ftp->message;
  33. $ftp->binary();
  34. $ftp->cwd("$remote_dir" ) or die "Cannot change to remote base $remote_dir ", $ftp->message;
  35. foreach my $rdir (keys %transfer) {
  36.  unless ($ftp->cwd("$rdir" )) {
  37.    $ftp->mkdir("$rdir" );
  38.    $ftp->cwd("$rdir" ) or die "Cannot change working directory to $_ ", $ftp->message;
  39.  }
  40.  foreach (@{$transfer{$rdir}}) {
  41.    $ftp->put("$_" ) or die "put $_ failed ", $ftp->message;
  42.  }
  43.  $ftp->cwd(".." ) or die "Cannot change back to remote base ", $ftp->message;
  44. }
  45. $ftp->quit;


 
c'est a adapter selon vos besoins, ici, il est supposé que les répertoires cibles sont tous situés dans un répertoire commun, $remote_dir, mais ça peut très bien être autrement enchangeant un peu le code.
 
A+,


Message édité par gilou le 16-01-2013 à 15:50:03

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2171521
lodou
Posté le 16-01-2013 à 16:03:22  profilanswer
 

Merci bien pour tous, je vais étudier votre code, le modifier pour mes besoin et voir si j'arrive à l'utiliser.

mood
Publicité
Posté le 16-01-2013 à 16:03:22  profilanswer
 

n°2171528
gilou
Modérateur
Modzilla
Posté le 16-01-2013 à 16:15:09  profilanswer
 

Pour comprendre la structure de donnée intermédiaire, transfer, si j'applique le code (sans la partie qui commence par use Net::FTP;) a un répertoire contenant 3 fichiers de noms avis_225_336 avis_225_337 et avis_226_338
j'obtiens pour transfer:
un hash (ou liste associative) avec deux clés, 225 et 226, la valeur associée à la première clé (225) est une liste a deux éléments, avis_225_336 et avis_225_337, et et la valeur associée à la seconde clé (226) est une liste a un élément, avis_226_338.
La première partie du code construit la structure de données %transfer à partir des données locales, et la seconde partie du code l'exploite pour procéder au transfert à distance et savoir quoi transférer et ou.
 
A+,


Message édité par gilou le 16-01-2013 à 16:16:57

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2171600
lodou
Posté le 17-01-2013 à 09:05:25  profilanswer
 

Ok, encore 1-2 question. Lorsque je doit mettre le nom du répertoire, je doit mettre le chemin complet genre c:\windows\systeme\... ?
Et avec quoi puis je faire un exécutable de ce script ?

n°2171641
gilou
Modérateur
Modzilla
Posté le 17-01-2013 à 13:44:00  profilanswer
 

lodou a écrit :

Ok, encore 1-2 question. Lorsque je doit mettre le nom du répertoire, je doit mettre le chemin complet genre c:\windows\systeme\... ?
Et avec quoi puis je faire un exécutable de ce script ?

Le chemin complet si on n'exécute pas le script depuis ce répertoire.
Et c'est un script, donc on n'en fait pas un exécutable. Normalement, si l'installation de perl a été bien faite, le système reconnaîtra l'extension.pl pour le script (sous windows) ou la ligne #!/usr/bin/perl (sous linux) et fera exécuter ce script par l'interpréteur perl. On peut aussi faire enligne de commande: perl script.pl
 
A+,


Message édité par gilou le 17-01-2013 à 13:45:09

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Divers

  Programme de tri de fichier

 

Sujets relatifs
Déclenchement automatique de programme par enregistrement de fichierlancer un programme via un fichier externe
Programme pour isoler des images dans un fichierRech programme pour créer automatiquement un dossier par fichier?
Programme C++ / ecriture de fichier Access / 'ConflictTables'[DIVERS] Auto execution d'un programme à l'ouverture d'un fichier zip
Lire et écrire dans un fichier Excel avec un programme c++Fichier .bat pour démarrer un programme uniquement sur réponse de ping
Exécuter un fichier (ou programme) depuis du Tcl/TkTester si un fichier est déjà ouvert par un programme tiers
Plus de sujets relatifs à : Programme de tri de fichier


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR