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

Langage Perl Discussion :

Erreur avec Strawberry_5.20 absente en Active_5.12


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert Avatar de dmganges
    Homme Profil pro
    Retraité. Ne recherche pas un emploi.
    Inscrit en
    Septembre 2011
    Messages
    1 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Retraité. Ne recherche pas un emploi.
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2011
    Messages : 1 452
    Par défaut Erreur avec Strawberry_5.20 absente en Active_5.12
    Bonjour,
    Bien que le problème soit mis en évidence sur un module je poste ici car il semble s'agir d'initialisation de chemin de fichier.

    Je migre de Active_5.12 (32bits) en Strawberry_5.20 (64bits)

    J'utilise le module Win32::MediaPlayer
    Ce module fonctionne aussi bien en 5.12 qu'en 5.20

    Le programme suivant fonctionne parfaitement dans les 2 versions de Perl.

    NOUV.pl :
    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
    #!/usr/bin/perl
    use strict;
    use warnings;
    use utf8;
    use File::Spec;														# Gestion des noms des chemins sous tous les OS
    use Win32::MediaPlayer;										# Pour jouer un fichier son
     
    my $Time = 0;
    my $winmm = new Win32::MediaPlayer;
    my $Repertoire = "E:/_APPLI/Arabe/Ass_1/CDdecoup/LLc_009/";
    my $Fic = "Tr_001.mp3";
     
    my $fichier_Trad_Ora = File::Spec->catfile( $Repertoire, $Fic );
    $winmm->load($fichier_Trad_Ora);
    			$winmm->play;
    			$winmm->volume(80);
    			$Time = $winmm->length;
    			sleep (4);
    			$winmm->close;
    Le problème apparaît lorsque j'utilise Win32::MediaPlayer dans un programme (ESS.pl) beaucoup plus long qui fait appel entre autre à plusieurs API Windows.

    Suivant que je passe à Win32::MediaPlayer un chemin de fichier écrit en dur par moi-même ou un chemin généré par File::Spec et même par File::Spec::Win32, j'ai des comportements différents.

    Avec le chemin en dur ça fonctionne toujours, avec un chemin généré, jamais, quelque soit la façon dont je triture le chemin :

    Ceci fonctionne toujours, et bien d'autres essais...:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $fichier_mp3 = "E:\\_APPLI\\Arabe\\Ass_1\\CDdecoup\\LLc_009\\FicTitre.mp3";
    $fichier_mp3 = 'E://_APPLI//Arabe//Ass_1//CDdecoup//LLc_009//FicTitre.mp3';
    ...
    $winmm->load($fichier_mp3);

    Ceci ne fonctionne jamais, et bien d'autres essais...:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $fichier_mp3 = File::Spec::Win32->catfile( $Repertoire, 'FicTitre.mp3' );
    $winmm->load($fichier_mp3);
    même après avoir trituré dans tous les sens :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $fichier_mp3 = File::Spec::Win32->catfile( $Repertoire, 'FicTitre.mp3' );
    my @TempArray = split (/\\/, $fichier_mp3);
    print "ARRAY = @TempArray\n\n";
    $fichier_mp3 = join("//", @TempArray);
    ou encore :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $fichier_mp3 = File::Spec::Win32->catfile( $Repertoire, 'FicTitre.mp3' );
    my @TempArray = split (/\\/, $fichier_mp3);
    print "ARRAY = @TempArray\n\n";
    $fichier_mp3 = join("\\\\", @TempArray);
    Je sèche dessus depuis 2 jours,
    auriez-vous une idée ?
    MERCI d'avance !

    Ci-dessous divers essais, ceux qui fonctionnent correspondent aux chemins en dur,
    Le dernier qui plante avec un chemin construit avec File::Spec::Win32

  2. #2
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Par défaut
    Que contient $Repertoire et comment est-il construit si ce n'est pas un chemin un dur dans tes usages de catfile ?
    Pourrais-tu afficher $fichier_mp3 (sans le splitter) ?

  3. #3
    Membre Expert Avatar de dmganges
    Homme Profil pro
    Retraité. Ne recherche pas un emploi.
    Inscrit en
    Septembre 2011
    Messages
    1 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Retraité. Ne recherche pas un emploi.
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2011
    Messages : 1 452
    Par défaut
    Bonjour Philou67430,
    MERCI de t'intéresser à mon pb !

    Le $Repertoire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $Repertoire = File::Spec::Win32->catfile( $RepBase, $config{DEFAUT}{auteur}, 'CDdecoup', "LLc_$NumCours" );

    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
    	my $fichier_mp3 = File::Spec::Win32->catfile( $Repertoire, 'FicTitre.mp3' );
    		if ( !-e $fichier_mp3 ) {
      		die "Impossible de lire le fichier $fichier_mp3\n$!";
    		}
    		if ( $Stop ne "" ) { return; }
     
    	#####################DUF
     
    	#	$fichier_mp3 = "E:\\_APPLI\\Arabe\\Ass_1\\CDdecoup\\LLc_009\\FicTitre.mp3";
    	#	$fichier_mp3 = 'E://_APPLI//Arabe//Ass_1//CDdecoup//LLc_009//FicTitre.mp3';
     
    	#	my @TempArray = split (/\\/, $fichier_mp3);
    	#	print "ARRAY = @TempArray\n\n";
    	#	$fichier_mp3 = join("//", @TempArray);
    	#	$fichier_mp3 = join("\\\\", @TempArray);
     
    		print "FICMP3_1040=$fichier_mp3=\n\n\n";
     
    		sleep(1);
    		$winmm->load($fichier_mp3);
    		$winmm->play;
    		sleep(4);
    Cette construction avec File::Spec::Win32 fonctionne en ActivePerl 5.12 et même File::Spec depuis 2011 !
    Je suis venu à File::Spec::Win32 pour éponger un doute...

    Voici $fichier_mp3 non splitté

  4. #4
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    Par défaut
    Bonjour,

    En complément de la question de philou, je te suggère la solution qui consiste à forcer à avoir les chemins à la mode Unix (/), j'en ai eu ce weekend quand dans un programme qui interagi avec R et ce dernier accepte uniquement des chemins Windows en \\ ou /.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    my $fichier_Trad_Ora = File::Spec::Unix->catfile( $Repertoire, $Fic );

  5. #5
    Membre Expert Avatar de dmganges
    Homme Profil pro
    Retraité. Ne recherche pas un emploi.
    Inscrit en
    Septembre 2011
    Messages
    1 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Retraité. Ne recherche pas un emploi.
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2011
    Messages : 1 452
    Par défaut
    Bonjour djibril, et MERCI !

    J'avais déjà essayé.
    Je viens de refaire le test par acquit de conscience, même ano.

    En dur Win32::MediaPlayer accepte toutes ces combinaisons :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    "E:\\_APPLI\\Arabe\\Ass_1\\CDdecoup\\LLc_009\\FicTitre.mp3"
    "E:\_APPLI\Arabe\Ass_1\CDdecoup\LLc_009\FicTitre.mp3"
    'E://_APPLI//Arabe//Ass_1//CDdecoup//LLc_009//FicTitre.mp3'
    'E:/_APPLI/Arabe/Ass_1/CDdecoup/LLc_009/FicTitre.mp3'
    Ce qui me déroute c'est que ceci fonctionne en 5.20 :
    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
    #!/usr/bin/perl
    use strict;
    use warnings;
    use utf8;
    use File::Spec;														# Gestion des noms des chemins sous tous les OS
    use Win32::MediaPlayer;										# Pour jouer un fichier son
     
    my $Time = 0;
    my $winmm = new ;
    my $Repertoire = "E:/_APPLI/Arabe/Ass_1/CDdecoup/LLc_009/";
    my $Fic = "Tr_001.mp3";
    my $fichier_Trad_Ora = File::Spec->catfile( $Repertoire, $Fic );
    $winmm->load($fichier_Trad_Ora);
    			$winmm->play;
    			$winmm->volume(80);
    			$Time = $winmm->length;
    			sleep (4);
    			$winmm->close;
    NB : seulement File::Spec et je suis en Win7 !

    D'autre part, j'ai un autre programme qui contrôle mes BAL qui utilise également Win32::MediaPlayer et File::Spec qui est passé comme une lettre à la poste en 5.20

  6. #6
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    Par défaut
    Hum, y a -t-il un souci d'encodage de la chaine ? Ton code est encodé en quoi ?

  7. #7
    Membre Expert Avatar de dmganges
    Homme Profil pro
    Retraité. Ne recherche pas un emploi.
    Inscrit en
    Septembre 2011
    Messages
    1 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Retraité. Ne recherche pas un emploi.
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2011
    Messages : 1 452
    Par défaut
    Citation Envoyé par djibril
    Hum, y a -t-il un souci d'encodage de la chaine ?
    Je ne pense pas, tous mes codes sont en utf-8 NO BOM et j'ai use utf8;

    Je fais mes programmes avec beaucoup de Copier/Coller ce bout et bien d'autres fonctionnent :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    if ( $Mail_Ini{GLOBAL}{FicSon} eq 'OUI' ) {
    	$FicSon = File::Spec->catfile( $RepBase, $Mail_Ini{GLOBAL}{SonFin} );
    	$winmm->load($FicSon);
    	$winmm->play;
    	$winmm->volume(80);
    	sleep (4);
    	$winmm->close;
    }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Erreur avec NOT EXISTS : expression absente
    Par Battosaiii dans le forum SQL
    Réponses: 4
    Dernier message: 29/06/2011, 16h18
  2. Réponses: 3
    Dernier message: 22/12/2007, 14h06
  3. [Débutant][Conception] Erreur avec une classe interne
    Par Devil Redneck dans le forum Général Java
    Réponses: 5
    Dernier message: 11/06/2004, 15h45
  4. Erreur avec les ADO
    Par megane dans le forum Bases de données
    Réponses: 7
    Dernier message: 08/03/2004, 21h37
  5. Erreur avec WM_COMMAND (BN_CLICKED)
    Par cyberlewis dans le forum Windows
    Réponses: 2
    Dernier message: 09/02/2004, 00h25

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