IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SGBD Perl Discussion :

Recuperation de documents d'un champ blob


Sujet :

SGBD Perl

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Décembre 2007
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Recuperation de documents d'un champ blob
    Bonjour bonjour,

    Avant toute chose, je préfère prévenir d'avance, je suis loin d'être au point en matière de programmation perl (pourquoi suis-je ici me direz-vous ?), mais il se trouve qu'un collègue a pondu un script nous permettant d'accèder à notre basede données mysql, pour y récupérer des documents dans un champ blob et les extraire.

    Tout avait l'air de fonctionner or il se trouve qu'après 3 malheureux documents (des CVs en l'occurence), le script s'arrête sur une erreur : "No such file or directory ./extract.pl line 44"

    Bref si vous y voyez plus clair que moi, je suis preneur de toute suggestion

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
     
    #!/usr/bin/perl
    use DBI;
     
    $extract_dir = "/var/cvtheque";
    $log_dir = "/var/cvtheque";
     
    my $dbh = DBI->connect('DBI:mysql:mabase', 'monuser', 'monpass') or die "Couldn't connect to database: " . DBI->errstr;
     
    my $sth = $dbh->prepare("SELECT concat(rc.name,' ',replace(rc.surname,',',' ')) candidat,
                                    a.data,
                                    a.origine,
                                    case a.typemime when 'application/pdf' then 'pdf'
                                                    when 'text/plainf' then 'txt'
                                                    when 'text/html' then 'html'
                                                    when 'text/richtext' then 'rtf'
                                                    else 'doc' end filetype
                               FROM (SELECT rc.idrc,rcv.data,rcv.typemime,rcv.origine
                                       FROM rec_candidat rc,
                                            rec_cv rcv,
                                            rec_lien_candidat_cv rl
                                      WHERE rcv.idrcv = rl.idrcv
                                        AND rl.idrc = rc.idrc) a,
     
                                    (SELECT rc.idrc,max(rcv.origine) max_date
                                       FROM rec_candidat rc,
                                            rec_cv rcv,
                                            rec_lien_candidat_cv rl
                                      WHERE rcv.idrcv = rl.idrcv
                                        AND rl.idrc = rc.idrc
                                   GROUP BY rc.idrc) b,
                                     rec_candidat rc
                              WHERE a.idrc=b.idrc
                                AND a.origine=b.max_date
                                AND a.idrc=rc.idrc") or die "Couldn't prepare statement: " . $dbh->errstr;
     
    $sth->execute;
     
    open(my $lh,'>',$log_dir . "\/extract.log") or die $!;
    print $lh "Extraction des CVs de la base MySQL Jems:\n\n";
     
    while (@data = $sth->fetchrow_array()) {
     
            print $lh "$data[0].$data[3]\n";
    	open(my $fh,'>',$extract_dir . "\/" . $data[0] . "." . $data[3]) or die $!;
    	binmode $fh;
    	print $fh $data[1];
    	close $fh;
    }
     
    close $lh;
    $sth->finish;
     
    $dbh->disconnect;
    La ligne 44 est donc celle où le script concatène l'array vers un fichier. Après creusage de tête, j'imagine que comme en php, il indique des numéros de position dans l'array, où 0 correspondrait au nom du fichier tiré de la requête, et 3 serait son extension toujours tiré de la requête...

    Je ne vois pas ce qui pourrait entrainer le problème puisqu'il commence à écrire dans le répertoire
    Si vous avez des idées, je vous en remercie par avance !


  2. #2
    Nouveau Candidat au Club
    Inscrit en
    Décembre 2007
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    et petit up post-fêtes :p

    Bon, je n'ai pas beaucoup avancé alors si d'aventure vous avez une solution...

    Voici ce que j'ai appliqué sur la suggestion d'un collègue foromeur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    while (@data = $sth->fetchrow_array()) {
    my $file_name = $extract_dir . '/' . $data[0] . '.' . $data[3];
    print $lh "$data[0].$data[3]\n";
     open(my $fh,'>', $file_name) or die "'$file_name' fautif ($!)\n";
    binmode $fh;
     print $fh $data[1];
    close $fh;
    }
    Ca m'a permis de voir que c'était un fichier .doc avec des caractères accentués qui faisait planter le truc, donc j'ai tenté d'insérer un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $file_name = ~tr/ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÑÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïñòóôõöùúûüýÿ/AAAAAACEEEEIIIINOOOOOUUUUYaaaaaaceeeeiiiinooooouuuuyy/
    mais ça n'a pas été concluant puisqu'alors il n'extrayait plus qu'un seul CV et s'arrêtait (sans plantage remarquez...)

    Voilà si vous avez des idées, je suis toujours preneur

Discussions similaires

  1. [WD16] Recuperation champ blob
    Par debo41 dans le forum WinDev
    Réponses: 2
    Dernier message: 30/11/2012, 09h06
  2. [Oracle] recuperer image depuis champ BLOB oracle
    Par dimainfo dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 11/11/2010, 15h23
  3. Réponses: 4
    Dernier message: 02/03/2010, 16h32
  4. Réponses: 1
    Dernier message: 12/05/2007, 10h26
  5. faire un insert pour un champ blob
    Par tripper.dim dans le forum InterBase
    Réponses: 10
    Dernier message: 02/05/2003, 16h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo