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

Web Perl Discussion :

ouverture et traitement fichier via formulaire


Sujet :

Web Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mai 2007
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 33
    Par défaut ouverture et traitement fichier via formulaire
    Bonjour
    j'ai un problème avec mes scripts perls et j'aurais bien besoin d'un coup de pouce.

    J'ai d'un coté un script d'upload qui fonctionne nickel via un formulaire.

    De l'autre j'ai un script de traitement qui s'applique sur un fichier , qui l'ouvre et chope un certains nombres d'informations dessus.Le script de traitement fonctionne quand je l'appel ds le shell en l'éxécutant sur un fichier style : C:\perl scripttraitement.pl nomdufichieràtraiter

    J'aimerai en fait combiner les deux : c'est à dire charger dans mon formulaire le fichieràtraiter pour qu'il l'upload , ouvre le fichier en lecture pou le traiter sans avoir a passer par le shell...

    J'ai bidouillé à mort et jm'en sort pas alors j'appel à l'aide
    voila si quelqu'un peut m'aider , c'est vraimment cool ...
    merci bonne soirée

    Voila le script appelé par le formulaire:

    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
    #!/usr/bin/perl 
     
     use CGI;
     
     $upload_dir = "/upload";
     
     $query = new CGI;
     
     $filename = $query->param("nomdufichieràtraiter");
     $filename =~ s/.*[\/\\](.*)/$1/;
     $upload_filehandle = $query->upload("nomdufichieràtraiter");
     
     open UPLOADFILE, ">$upload_dir/$filename";
     
     binmode UPLOADFILE;
     
     while ( <$upload_filehandle> )
     {
       print UPLOADFILE;
     }
     
     close UPLOADFILE;
     
     print $query->header ( );
     print <<END_HTML;
     
     <HTML>
     <HEAD>
     <TITLE>Thanks!</TITLE>
     </HEAD>
     
     <BODY>
     
     <P>Nickel t'as uploadé gamin</P>
     
     
     
     </BODY>
     </HTML>
     
     END_HTML
    Voila le coe HTML du formulaire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <HTML>
     <HEAD></HEAD>
     <BODY>
     <FORM ACTION="upload.cgi" METHOD="post" ENCTYPE="multipart/form-data">
    Fichier à uploader: <INPUT TYPE="file" NAME="nomdufichieràtraiter">
     <INPUT TYPE="submit" NAME="Submit" VALUE="Submit Form">
     </FORM>
     </BODY>
    </HTML>
    voila mon script de traitement que jusqu'à présent je fais marcher dans le shell sur le fichieràtraiter
    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
     
    #!/usr/bin/perl
    sub tableau_texte{
        	my $fichier1=$_[0];
            my $fich= "essai.txt";
    	open BOB, '>', $fich
    	or die "Couldn't open $fich : $!\n";
    	open YEAST, "$fichier1";
    	while (<YEAST>){
    		if(($_=~/^>\s(\d)\:(\d+)-(\d+)\s(\W)/) and ($lignePrecedente==1)){
    			if($1!=1){
    				close $fichier1;
    				close (BOB);
    				return;
    			}
    		}
    		if($_=~/^>\s(\d)\:(\d+)-(\d+)\s(\W)/){
    			if($1==1){@ligne=($4.$2,$4.$3);}
    			if($1<$nbGenome && $1!=1){push(@ligne,$4.$2,$4.$3);}
    			if($1==$nbGenome){
    				push(@ligne,$4.$2,$4.$3);
             			print BOB ("@ligne\n");
       			}
    		}
    		if($_=~/^=/){$lignePrecedente=1;}
    		else{$lignePrecedente=0;}
        	}
     
    	close YEAST;
      	close BOB;
     
    }
    tableau_texte ($ARGV[0]);

  2. #2
    Expert confirmé
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Par défaut
    Et qu'est-ce qui ne marche pas exactement ? Le fichier est-il bien uploadé dans le bon répertoire ? (en passant je te conseille d'utiliser File::Copy plutôt que de copier ligne par ligne... Tu surcharges inutilement ton serveur)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #!/usr/bin/perl
    sub tableau_texte{
        	my $fichier1=$_[0];
            my $fich= "essai.txt";
    	open BOB, '>', $fich
    	or die "Couldn't open $fich : $!\n";
    	open YEAST, "$fichier1";
    	while (<YEAST>){
    		if(($_=~/^>\s(\d)\:(\d+)-(\d+)\s(\W)/) and ($lignePrecedente==1)){
    			if($1!=1){
    				close $fichier1;
    Il faudrait remplacer celui-là aussi par "close YEAST;".

    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
     
    				close (BOB);
    				return;
    			}
    		}
    		if($_=~/^>\s(\d)\:(\d+)-(\d+)\s(\W)/){
    			if($1==1){@ligne=($4.$2,$4.$3);}
    			if($1<$nbGenome && $1!=1){push(@ligne,$4.$2,$4.$3);}
    			if($1==$nbGenome){
    				push(@ligne,$4.$2,$4.$3);
             			print BOB ("@ligne\n");
       			}
    		}
    		if($_=~/^=/){$lignePrecedente=1;}
    		else{$lignePrecedente=0;}
        	}
     
    	close YEAST;
      	close BOB;
     
    }
    tableau_texte ($ARGV[0]);
    Et $nbGenome ? Il n'est jamais initialisé, jamais déclaré (tu as encore omis de mettre le pragma "strict"...), si c'est là l'ensemble de ton script, ça ne risque pas de marcher.

    --
    Jedaï

  3. #3
    Membre averti
    Inscrit en
    Mai 2007
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 33
    Par défaut
    Ok oK alors deja merci pour tes conseils
    En fait j'ai pas mis l'intégralité de mon script de traitement , le $nbregenome est initialisé et calculé plus loin ds le programme...

    Mon problème c'est de faire une interface HTML avec un formulaire qui charge le fichier qui est sur mon ordi ,récupère son nom , le stock dans une variable et effectue en meme temps le traitement pour recupérer des donnés.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $filename = $query->param("nomdufichieràtraiter");#permet de recup le nomdufichier chargé dans le formulaire
     $filename =~ s/.*[\/\\](.*)/$1/;
    J'ai ses deux scripts qui n'ont pas de lien direct mais j'aimerai les lier .
    C'est à dire ne pas passer par le shell , mais par une interface HTML, qui par un formulaire récupère le nom du fichier sur lequel je veux appliquer un traitement ( et qu"il l'applique du coup juste en cliquant sur le bouton du formulaire)

    Jusqu'à present mon script de traitement , fonctionne dans le shell et traite le fichier qui est est dans le ARGV[0]
    J'aimerai en quelque sorte que dans mon argV[0] il y ait le fichier chargé dans le formulaire pour qu'il le traite.
    J'ai tenté cela ...de mettre le $filename(donc nomfichier récup dans le formulaire) dans le argv[0] pour qu'il applique la fonction de traitement dessus mais ca marche pas :-(.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    sub tableau_texte{
        	$filename=$_[0];
    #jvous passe tous le reste du code qui marche
    tableau_texte ($ARGV[0]);
    Bref j'ai essayé d'être le plus clair possible , je sais pas si j'ai réussi ...
    Si vous avez percuté merci pour le coup de main
    Merki A++

  4. #4
    Expert confirmé
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Par défaut
    En bref tu veux appeler un programme externe (un script Perl dans ce cas) à partir de ton script CGI ? Dans ce cas il suffit d'utiliser system() ou les backquotes. Va jeter un coup d'oeil à la partie de la FAQ consacrée au processus.

    --
    Jedaï

  5. #5
    Membre averti
    Inscrit en
    Mai 2007
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 33
    Par défaut
    En bref j'aimerai que, à chaque fois , le nouveau fichier chargé dans le formulaire soit pris comme paramètre de mon script perl.

    Le formulaire appel déjà mon script
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <body>
     <FORM ACTION="script.cgi" METHOD="post"  
     <ENCTYPE="multipart/form-data">
     <INPUT TYPE="file" NAME="FichierDeSortiMauve">
      <INPUT TYPE="submit" NAME="Submit" VALUE="Submit Form">
    </body>
    Mais comment dans mon script , récupéré le path du fichier mis dans le formulaire , pour l'ouvrir et le traiter .
    Genre que cliker sur le bouton du formulaire revienne à faire dans le shell C:\script.pl suivi du 'nomfichier' surlequel s"éxecute le script.
    Puisque dans mon script j'utiliise des fonctions qui s'applique sur ce nomfichier stocké en paramètre dans le argv[0]
    Ce que j'arrive pas à faire c'est que , le nomfichier soit stocké dans le argv[0] pour etre ouvert et traiter par le script

    Voila , je vais regarder ce que vous m'avez indiqué
    Merci je vous tiens au courant

  6. #6
    Membre averti
    Inscrit en
    Mai 2007
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 33
    Par défaut
    Re bonjour
    alors j'ai tenté ca dans le script que j'appel via mon formulaire
    sauf qu'il ne stocke pas le nomdufichier dans $filename pour i appliquer le perl5.pl.
    Donc le script perl5.pl ne se lance pas....

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #!C:/Perl/bin/perl -w
    use CGI::Carp qw(fatalsToBrowser);
    use CGI;
    $query= new CGI;
    #Methode pour uploader le fichier
    $filename = $query->param("Fichier");
     #$filename =~ s/.*[\/\\](.*)/$1/;  # regex pour recuperer uniquememnt le nom du fichier
    # upload des fichiers d'analyse
    system "perl 5.pl $filename";
    une idée?
    merci

Discussions similaires

  1. Réponses: 2
    Dernier message: 03/03/2011, 18h49
  2. Intégrer l'ouverture d'un fichier dans formulaire conteneur (MDI)
    Par stef33150 dans le forum Windows Forms
    Réponses: 1
    Dernier message: 15/02/2010, 15h27
  3. Erreur upload fichier via formulaire
    Par Telecaster dans le forum Langage
    Réponses: 2
    Dernier message: 05/02/2009, 11h30
  4. [Upload] Upload de plusieurs fichiers via formulaire
    Par seb67110 dans le forum Langage
    Réponses: 2
    Dernier message: 02/05/2007, 11h55
  5. [Web] Upload fichier via formulaire HTTP
    Par nik00s dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 11/08/2005, 12h27

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