[R] Extraire des infos d'un nom de fichier (stringsplit)

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
clark17
Niveau 4
Niveau 4
Messages : 70
Enregistré le : ven. 23 sept. 2011 02:12
Status : Hors ligne

[R] Extraire des infos d'un nom de fichier (stringsplit)  

#1

Message par clark17 »

Bonjour à tous,

Dans le cadre d'un petit script, je souhaite extraire des données sur une petite liste de fichiers vidéos.
Les fichiers sont de la forme:
2018-03-01 (blabla) - blabla2 - titre de la vidéo.avi

A cette fin j'ai pondu ce petit script:

Code : Tout sélectionner

;Chargement de la liste des fichiers dans un tableau
Local $listevideos = _FileListToArrayRec(@ScriptDir, "*.avi;*.mp4;*.mkv")
If @error Then
	MsgBox($MB_SYSTEMMODAL, "Erreur", "Aucune vidéo dans le dossier.", 15)
	Exit
EndIf
_ArrayDisplay($listevideos, "$listevideos")


;Création d'un tableau $bdd vide contenant les infos utiles pour chaque vidéos
Local $bdd[$listevideos[0]][6]

;Boucle remplissage du tableau $bdd
Local $ibdd = 0
For $i = 1 To $listevideos[0]
	$bdd[$ibdd][0] = $listevideos[$i] ;Colonne 0 = Nom du fichier vidéos (*.avi)

	;Extraire les données du nom de la vidéo
	Local $tableaunom = StringSplit($listevideos[$i], "-") ;Découpage du nom du fichier
	$tableaunom[5] = StringTrimLeft($tableaunom[5], 1) ;Nom de la vidéo
	$tableaunom[5] = StringTrimRight($tableaunom[5], 4) ;Nom de la vidéo
	$tableaunom[1] = StringLeft($tableaunom[1], 4) ;Année
	$tableaunom[2] = StringLeft($tableaunom[2], 2) ;Mois
	$tableaunom[3] = StringLeft($tableaunom[3], 2) ;Jour
 	Local $dateUS = $tableaunom[1] & "-" & $tableaunom[2] & "-" & $tableaunom[3] ;Date de la vidéo au format US (2017-12-27)
	Local $dateFR = $tableaunom[3] & "." & $tableaunom[2] & "." & $tableaunom[1] ;Date de la vidéo au format FR (27.12.2017)
	Local $titrevideo = $tableaunom[5]
	Local $thumbnail = StringTrimRight($listevideos[$i], 3) & "jpg"
	Local $fichierjson = StringTrimRight($listevideos[$i], 3) & "json"

	;Remplissage d'une ligne du tableau $bdd
	$bdd[$ibdd][1] = $titrevideo ;Colonne 1 = Titre de la vidéo
	$bdd[$ibdd][2] = $dateFR ;Colonne 2 = Date FR
	$bdd[$ibdd][3] = $dateUS ;Colonne 3 = Date US
	$bdd[$ibdd][4] = $thumbnail ;Colonne 4 = Nom du fichier image pour le thumbnail
	$bdd[$ibdd][5] = $fichierjson ;Colonne 5 = Nom du fichier JSON

	$ibdd += 1
Next
_ArrayDisplay($bdd, "$listevideos")
Celui-ci fonctionne correctement et le tableau $bdd contient bien ce qu'il me faut.
Le problème c'est le cas non conforme. Par exemple des - dans le titre de la vidéos:
2018-03-01 (blabla) - blabla2 - titre-de-la-vidéo.avi
Avec ce titre du coup je n'ai que le premier mot...
Je me doute qu'il va falloir passer que je vais devoir utiliser des RegExp mais ce n'est pas vraiment ma tasse de thé...
Modifié en dernier par clark17 le lun. 12 mars 2018 18:55, modifié 3 fois.
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Extraire des infos d'un nom de fichier

#2

Message par mikell »

Pas nécessairement... tu peux essayer StringSplit($listevideos[$i], " - ", 1)
ça marchera si les tirets dans le nom ne sont pas encadrés par des espaces :wink:
Maintenant si tu as des trucs du genre 2018-03-01 (blabla) - blabla2 - titre - de - la - vidéo.avi , même du regex ne pourra rien pour toi
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
clark17
Niveau 4
Niveau 4
Messages : 70
Enregistré le : ven. 23 sept. 2011 02:12
Status : Hors ligne

Re: [..] Extraire des infos d'un nom de fichier

#3

Message par clark17 »

Merci, je n'y avais pas pensé!!!
Du coup je fais une première passe avec " - " pour découpé en 3, puis une deuxième passe avec "-" pour découper la date et avoir année/mois/jour.
;Boucle remplissage du tableau $bdd
Local $ibdd = 0
For $i = 1 To $listevideos[0]
   ;Extraire les données du nom de la vidéo
   Local $tableaunom = StringSplit($listevideos[$i], " - ", 1) ;Découpage du nom du fichier

   Local $tableaudate = StringSplit($tableaunom[1], "-") ;Découpage de la date
   $tableaudate[1] = StringLeft($tableaudate[1], 4) ;Année
   $tableaudate[2] = StringLeft($tableaudate[2], 2) ;Mois
   $tableaudate[3] = StringLeft($tableaudate[3], 2) ;Jour
   Local $dateUS = $tableaudate[1] & "-" & $tableaudate[2] & "-" & $tableaudate[3] ;Date de la vidéo au format US (2017-12-27)
   Local $dateFR = $tableaudate[3] & "." & $tableaudate[2] & "." & $tableaudate[1] ;Date de la vidéo au format FR (27.12.2017)

   $titrevideo = StringTrimRight($tableaunom[3], 4) ;Titre de la vidéo

   Local $thumbnail = StringTrimRight($listevideos[$i], 3) & "jpg"
   Local $fichierjson = StringTrimRight($listevideos[$i], 3) & "json"

   ;inputBox pour remplir la colonne description
   Local $reponse = InputBox("Description", "Description pour: " & $listevideos[$i])

   ;Remplissage d'une ligne du tableau $bdd
   $bdd[$ibdd][0] = $listevideos[$i] ;Colonne 0 = Nom du fichier vidéos (*.avi)
   $bdd[$ibdd][1] = $titrevideo ;Colonne 1 = Titre de la vidéo
   $bdd[$ibdd][2] = $dateFR ;Colonne 2 = Date FR
   $bdd[$ibdd][3] = $dateUS ;Colonne 3 = Date US
   $bdd[$ibdd][4] = $thumbnail ;Colonne 4 = Nom du fichier image pour le thumbnail
   $bdd[$ibdd][5] = $fichierjson ;Colonne 5 = Nom du fichier JSON
   $bdd[$ibdd][6] = $reponse ;Colonne 6 = Description de la vidéo

   $ibdd += 1
Next
Répondre