Problème avec un compteur!!! grrr!

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
gansta93
Messages : 1448
Inscription : jeu. 26/févr./2004 11:17
Localisation : Le Village
Contact :

Message par gansta93 »

Arf.
Je ferais bien d'être aussi maniac sur l'orthographe plutot que de l'être pour rien.
Mais tu crois que ça changerais quelque chose appart, biensur, la légertée du code?
Et il y a un truc que je ne comprand pas.
Tu as mis le code suivant.

Code : Tout sélectionner

m3u$=""
m3u$=m3u$+".M3U"
Mais si l'on fait ça, m3u$ n'aura plus comme valeure que .M3U vu qu'on l'aura vidé juste avant.
Ou alors il y a un truc que je ne saisi pas.
Dernière modification par gansta93 le mer. 14/juil./2004 20:44, modifié 1 fois.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

je repost car j'etait en train d'editer mon message !!


un simple

Code : Tout sélectionner


 ext$=GetExtensionPart(m3u$)
If ext$<>"m3u"
    m3u$=left(m3u$, len(m3u$)-4)   ; Important il faut retirer les 4 derniers characteres (l'extention+le point)
    m3u$=m3u$+".M3U" ; maintenant on met la bonne extention
endif
n'aurai pas suffis ??

windows contrairement a Linux ne fait pas la difference entre les majuscule et minuscule !!!
gansta93
Messages : 1448
Inscription : jeu. 26/févr./2004 11:17
Localisation : Le Village
Contact :

Message par gansta93 »

Dobro a écrit :je repost car j'etait en train d'editer mon message !!


un simple

Code : Tout sélectionner


 ext$=GetExtensionPart(m3u$)
If ext$<>"m3u"
    m3u$=left(m3u$, len(m3u$)-4)   ; Important il faut retirer les 4 derniers characteres (l'extention+le point)
    m3u$=m3u$+".M3U" ; maintenant on met la bonne extention
endif
n'aurai pas suffis ??

windows contrairement a Linux ne fait pas la difference entre les majuscule et minuscule !!!
Mais si jamais il n'y avait aucune extension à m3u$, on couperait le nom en deux.
Il faudrait vérifier que les quatre avant-derniers caractères sont bien une extension.

Code : Tout sélectionner

If ext$<>"m3u"
temp$=right(m3u$, 4) ; On ne prand que les quatre derniers caractères de m3u$ que l'on mait dans la variable temp$ pour ne pas effacer m3u$
temp$=left(temp$,1) ; On ne prand que l'éventuel point d'une extension
if temp$="."
    m3u$=left(m3u$, len(m3u$)-4)   ; Important il faut retirer les 4 derniers characteres (l'extention+le point)
endif
    m3u$=m3u$+".M3U" ; maintenant on met la bonne extention
endif
Tu en pense quoi?
Parce que si c'est pas une extension, l'utilisateur se retrouve avec un nom coupé.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

ben si tu veux !!

mais dans l'absolu ça sert pas vraiment car les fichiers sur windows ont toujours une extention en general !!
:)

en fait je viens de voir que ta soluce n'est pas bonne !!
car s'il n'y a pas de 'extention , il n'y aura pas de point non plus !!

pour savoir si un fichier a une extention tu verifie si dans son nom il y a un point .... :D
Dernière modification par Backup le mer. 14/juil./2004 21:09, modifié 1 fois.
gansta93
Messages : 1448
Inscription : jeu. 26/févr./2004 11:17
Localisation : Le Village
Contact :

Message par gansta93 »

C'est vrai.
Mais si par mégarde l'utilisateur oublirait de mettre le .M3U derrière le nom du fichier ça serait embêtant après pour que le fichier soit reconnu.
Cela peut arriver si la personne demande l'affichage des extensions.
Lorsqu'on enregistre un fichier, on est obligé de préciser l'extension dans le nom que l'on écrit parce qu'il part du principe que si on affiche les extensions, on les marque.
ça a ses avantages et ses inconveignents.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

si c'est bon autant pour moi !! :D :D :D
gansta93
Messages : 1448
Inscription : jeu. 26/févr./2004 11:17
Localisation : Le Village
Contact :

Message par gansta93 »

Bon... moi il faut que je teste tout ça... j'espère que ça marche.
gansta93
Messages : 1448
Inscription : jeu. 26/févr./2004 11:17
Localisation : Le Village
Contact :

Message par gansta93 »

Bon, je croi que tout marche bien.
Au cas où ça interresse quelqu'un, voici le code.

Code : Tout sélectionner

Procedure.s ListFiles(directory.s , filename.s, extension.s , directoryid.l )

Global compteur

  If Right(directory,1)<>"\"
    directory+"\"
  EndIf

  ExamineDirectory(directoryid,directory,"*.*")
  dirid=NextDirectoryEntry()
  While dirid
    Select dirid
      Case 1
        file.s=DirectoryEntryName()
        this_extension.s=LCase(GetExtensionPart(file))
        this_filename.s=LCase(Left(file,Len(file)-Len(this_extension)))
        If Len(this_extension)
          this_filename=Left(this_filename,Len(this_filename)-1)
        If this_extension=extension Or extension="*"
          If this_filename=filename Or filename="*"
            file.s=directory+DirectoryEntryName()
            ;file contains the full path and filename
            ;you must insert here what to do with the file
WriteStringN(file)
compteur=compteur+1
EndIf
EndIf
EndIf
      Case 2
        If DirectoryEntryName()<>"." And DirectoryEntryName()<>".."
          ListFiles(directory+DirectoryEntryName()+"\",filename,extension,directoryid+1)
          UseDirectory(directoryid)
        EndIf
    EndSelect
    dirid=NextDirectoryEntry()
  Wend
  ProcedureReturn ""
EndProcedure

folder$=PathRequester("Dossier où seront listés les MP3","C:\")
If folder$
m3u$=SaveFileRequester("Enregistrer la PlayListe sous",folder$+"musiques.M3U","PlayListe M3U(*.M3U)|*.M3U)",0)
If m3u$
ext$=GetExtensionPart(m3u$)
If ext$<>"m3u"
temp$=Right(m3u$, 4) ; On ne prand que les quatre derniers caractères de m3u$ que l'on mait dans la variable temp$ pour ne pas effacer m3u$
temp$=Left(temp$,1) ; On ne prand que l'éventuel point d'une extension
If temp$="."
    m3u$=Left(m3u$, Len(m3u$)-4)   ; Important il faut retirer les 4 derniers characteres (l'extention+le point)
EndIf
    m3u$=m3u$+".M3U" ; maintenant on met la bonne extention
EndIf
If CreateFile(0,m3u$)
ListFiles(folder$,"*","mp3",0)      ; the last parameter should be zero
CloseFile(0)
If compteur=0
MessageRequester("M3U Generator","La PlayListe "+m3u$+" n'a pas été créée car le répertoire "+folder$+" ne contenait aucun MP3.",#mb_ok|#mb_iconasterisk)
If DeleteFile(m3u$)=0
MessageRequester("Erreur","La Playliste vide n'a pas pu être supprimée.",#mb_ok|#mb_iconstop)
EndIf
Else
nombre$=Str(compteur)
MessageRequester("M3U Generator","La PlayListe "+m3u$+" a été créée."+#crlf+"Elle contient "+nombre$+" MP3.",#mb_ok|#mb_iconasterisk)
EndIf
Else
MessageRequester("Erreur","Impossible de créer la PlayListe.",#mb_ok|#mb_iconstop)
EndIf
Else
MessageRequester("Erreur","Tu n'as pas sélectionné de titre pour la PlayListe.",#mb_ok|#mb_iconstop)
EndIf
Else
MessageRequester("Erreur","Tu n'as pas sélectionné le docier où les MP3 doivent être listés.",#mb_ok|#mb_iconstop)
EndIf
About("M3U Generator","Copyright "+#copyright+" "+FormatDate("%yyyy par Gansta93. Tous droits réservés.",Date()),0)
End
Et voila un générateur de PlayListe MP3 d'un répertoir ainsi que de ses sous-répertoires.
Je n'ai pas pu testé beaucoup, mais en tout cas la playliste fabriquée est compatible avec le très célèbre Winamp.
Si quelqu'un souhaite améliorer ce code, qu'il poste ici, j'adore évoluer dans ma passion qu'est la programmation, en PureBasic biensur :-).
Et en ce qui concerne le correcteur, je suis très sérieux!
Bon il est sur que je ne ferait pas le dictionnair, mais je peux aider pour les codes :-).
Bon comme je l'ai dis si quelqu'un veut améliorer mon petit M3U Generator, qu'il le face, s'il veut le produire à son nom, qu'il le face mais quand même qu'il me remerci :-) j'ai quand même maché le travail.
Encore merci à vous!!!!!!!! :-)
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

Si tu veux faire quelque chose de correct avec les noms de fichier, tu dois aussi tenir compte que certaines extensions font plus de 3 caractères.

.jpeg pour certaine images, .catalog pour les fichiers de langue de PB.

Il y a aussi les fichiers dont l'extension fait moins de trois caractères.
.pb, .c, .h, etc...

Il y a également les fichiers avec des extensions multiples.
.exe.manifest, par exemple.

Tu peux mettre autant d'extensions que tu veux, (avec certaines limites, quand même), Windows ne bronchera pas.

Voilà un petit bout de code qui te donne un exemple de ce que tu peux faire pour gérer tout ça.

On peut certainement le perfectionner, mais tel qu'il est, il fonctionne déjà pas mal.

Pour tester, tu enlèves le commentaire sur une des premières lignes. (Cas 1 à 5). Si toutes les lignes restent en commentaire, tu as quand même un chemin par défaut.

Code : Tout sélectionner

;- Petit exemple concernant les différents cas qui peuvent se présenter
;- dans les noms de fichier. 
;- Il suffit de retirer le ";" devant une des lignes pour tester.
;- 

;/ Dans le premier cas, on a un fichier qui comporte plusieurs extensions.
;ch$ = "D:\PureBasic\MesProgs\Programmes\MonProgramme.exe.txt.prg.ttt.drt.ucg.pot"

;/ Dans le second cas, on a un fichier qui n'a pas d'extension
;ch$ = "D:\PureBasic\MesProgs\Programmes\MonProgramme"

;/ Dans le troisième cas, on a un fichier qui n'a qu'une extension, mais pas la bonne
;ch$ = "D:\PureBasic\MesProgs\Programmes\MonProgramme.exe"

;/ Dans le quatrième cas, on a un fichier qui n'a qu'une extension, la bonne
;ch$ = "D:\PureBasic\MesProgs\Programmes\MonProgramme.m3u"

;/ Dans le cinquième cas, le nom du fichier n'existe pas
;ch$ = "D:\PureBasic\MesProgs\Programmes\"


Chemin$   = GetPathPart(ch$)
Fichier$  = GetFilePart(ch$)
Ext$      = GetExtensionPart(ch$)

If Fichier$ <> ""
  If Len(Ext$) = 0    ; Si le fichier n'a pas d'extension, on l'ajoute
    Fichier$+".m3u" 
    ; Et si il en a une, on la vire et on ajoute la bonne extension,
    ; même si celle qui existait avant était la bonne
  ElseIf Len(Ext$)>0  
    Fichier$ = StringField(Fichier$,1,".")+".m3u"
  EndIf
Else
  Fichier$ = "Defaut.m3u"
EndIf

If Chemin$ <>""
  Chemin$+Fichier$
Else
  Chemin$ = "C:\"
  Chemin$+Fichier$
EndIf


Debug "Chemin complet = "+Chemin$
Debug "Nom du fichier = "+Fichier$
Chris :)
gansta93
Messages : 1448
Inscription : jeu. 26/févr./2004 11:17
Localisation : Le Village
Contact :

Message par gansta93 »

Salut,

C'est vrai, je n'avais pas pensé aux multiples extensions.
Ni d'ailleur aux extension à plus ou moins de trois lettres.
Je vais essayer de l'intègrer à mon code et si j trouve à améliorer, je posterais ici le nouveau code.
gansta93
Messages : 1448
Inscription : jeu. 26/févr./2004 11:17
Localisation : Le Village
Contact :

Message par gansta93 »

Pour ceux que ça peut interresser, voici le code maintenant modifié et commenté, peut-être même un peu trop.
Et n'oubliez pas, faut pas faire attention à l'orthographe!!!!!!!!!!! :-)

Code : Tout sélectionner

Procedure.s ListFiles(directory.s , filename.s, extension.s , directoryid.l )

;Deffinition de la variable pour connaître le nombre de MP3 que contiendra la PlayListe
;On la déclare en Global pour qu'elle puisse être utilisée à l'extérieure de la procedure
Global compteur

;Vérification de l'existance du caractère \ à la fin du chemain du répertoir à lister
  If Right(directory,1)<>"\"
    directory+"\"
  EndIf

; On liste touts les fichier du répertoir
  ExamineDirectory(directoryid,directory,"*.*")
;Fichier suivant
  dirid=NextDirectoryEntry()
  While dirid
    Select dirid
      Case 1 ;Si c'est un fichier
        file.s=DirectoryEntryName()
        this_extension.s=LCase(GetExtensionPart(file))
        this_filename.s=LCase(Left(file,Len(file)-Len(this_extension)))
        If Len(this_extension)
          this_filename=Left(this_filename,Len(this_filename)-1)
        If this_extension=extension Or extension="*"
          If this_filename=filename Or filename="*"
            file.s=directory+DirectoryEntryName()

; Après avoir trouvé un MP3, on l'écrit dans le fichier que l'on initialisera avant d'appeler la procedure
WriteStringN(file)
; On augmente le compteur de 1
compteur=compteur+1
EndIf
EndIf
EndIf
      Case 2 ; Si sous-dossier découvert (pas sur expliquez-moi svp)
        If DirectoryEntryName()<>"." And DirectoryEntryName()<>".."
; On rappel la procedure dans laquelle on est pour lister le sous-dossier
          ListFiles(directory+DirectoryEntryName()+"\",filename,extension,directoryid+1)
; On utilise le répertoir suivant
          UseDirectory(directoryid)
        EndIf
    EndSelect
    dirid=NextDirectoryEntry()
  Wend
  ProcedureReturn ""
EndProcedure

; Chois du répertoire où lister les MP3, en prenant par defaut le chemain C:\
folder$=PathRequester("Dossier où seront listés les MP3","C:\")
If folder$
; On demande où enregistrer la PlayListe, mais seulemant si le dossier à lister a été spécifié
m3u$=SaveFileRequester("Enregistrer la PlayListe sous",folder$+"Musiques.M3U","PlayListe M3U(*.M3U)|*.M3U)",0)
If m3u$
; Enciènes vérifications pour les extensions
; Je la laisse parce qu'elle est issue de mon inspiration avec un peux d'aide certe :-)
;ext$=GetExtensionPart(m3u$)
;If ext$<>"m3u"
;temp$=Right(m3u$, 4) ; On ne prand que les quatre derniers caractères de m3u$ que l'on mait dans la variable temp$ pour ne pas effacer m3u$
;temp$=Left(temp$,1) ; On ne prand que l'éventuel point d'une extension
;If temp$="."
;    m3u$=Left(m3u$, Len(m3u$)-4)   ; Important il faut retirer les 4 derniers characteres (l'extention+le point)
;EndIf
;    m3u$=m3u$+".M3U" ; maintenant on met la bonne extention
;EndIf

; Maintenant, nouvelle méthode, plus perfectionnée!
; On charcute m3u$ pour pouvoir l'opérer
; On ne prand que le chemain
Chemin$   = GetPathPart(m3u$)
; On ne prand que le nom de fichier
Fichier$  = GetFilePart(m3u$)
; On ne prand que l'extension, vous connaissez tout ça
Ext$      = GetExtensionPart(m3u$)

If Fichier$ <> ""
  If Len(Ext$) = 0    ; Si le fichier n'a pas d'extension, on l'ajoute
    Fichier$+".M3U"
    ; Et si il en a une, on la vire et on ajoute la bonne extension,
    ; même si celle qui existait avant était la bonne
  ElseIf Len(Ext$)>0
    Fichier$ = StringField(Fichier$,1,".")+".M3U"
  EndIf
Else
  Fichier$ = "Musiques.M3U"
EndIf

; Cas casi impossible, si le nom contient bien un chemain
; On passe par un requester, donc Windows hurle si l'on ne donne pas de chemain ou sinon il prand le répertoir que l'on veut lister
If Chemin$ <>""
m3u$=  Chemin$+Fichier$
Else
  Chemin$ = "C:\"
m3u$=  Chemin$+Fichier$
EndIf

; On y est!
; Création du fichier M3U
If CreateFile(0,m3u$)
; On appel la procedure pour lister le répertoir choisi au dessus
ListFiles(folder$,"*","mp3",0)      ; Le dernier paramètre doit être zéro je ne sais plus pourquoi
; On ferme le fichier, soyons propres!
CloseFile(0)

; Vérification sur le compteur
If compteur=0 ; Si aucun MP3 n'a été trouvé
MessageRequester("M3U Generator","La PlayListe "+m3u$+" n'a pas été créée car le répertoire "+folder$+" ne contenait aucun MP3.",#mb_ok|#mb_iconasterisk)
; On efface le fichier créé, et on vérifi que la suppression c'est bien faite
If DeleteFile(m3u$)=0
MessageRequester("Erreur","La Playliste vide n'a pas pu être supprimée.",#mb_ok|#mb_iconstop)
EndIf
Else
; On deffinit nombre$ histoire de se compliquer la vie vu qu'on aurait pu mettre ce qu'il vaut dirrectemant dans le requester ci-dessous
nombre$=Str(compteur)
MessageRequester("M3U Generator","La PlayListe "+m3u$+" a été créée."+#crlf+"Elle contient "+nombre$+" MP3.",#mb_ok|#mb_iconasterisk)
EndIf
; Cas d'erreurs
Else
MessageRequester("Erreur","Impossible de créer la PlayListe.",#mb_ok|#mb_iconstop)
EndIf
Else
MessageRequester("Erreur","Tu n'as pas sélectionné de titre pour la PlayListe.",#mb_ok|#mb_iconstop)
EndIf
Else
MessageRequester("Erreur","Tu n'as pas sélectionné le docier où les MP3 doivent être listés.",#mb_ok|#mb_iconstop)
EndIf
About("M3U Generator","Copyright "+#copyright+" "+FormatDate("%yyyy par Gansta93. Tous droits réservés.",Date()),0) ; Cette fonction n'est disponible que dans ma lib pas encore dispo car en cour de fabrication
End ; Finit!
Répondre