Récursivité sur nom de fichier

valtrase Messages postés 937 Date d'inscription lundi 19 janvier 2004 Statut Membre Dernière intervention 9 mai 2022 - Modifié par valtrase le 7/05/2016 à 20:12
valtrase Messages postés 937 Date d'inscription lundi 19 janvier 2004 Statut Membre Dernière intervention 9 mai 2022 - 9 mai 2016 à 00:38
Bonjour a tous,

Ce que je cherche à faire:
J'ai deux liste :
- Fichiers présent dans ma base
- Fichiers présent sur le disque dur
je voudrais rajouter les nouveaux fichiers du disque dans ma base. jusque là pas de problème une comparaison de chaine suffit.
Mais j'aime bien me compliquer la vie, et voilà comment.

je veux pouvoir rajouter mes fichiers présent sur le disque dans ma base de donnée selon un critère "Qualité d'exactitude" c'est français ça ?
Trois critères "Faible, Moyen, Strict"
Strict les noms de fichiers sont égaux à 100%, Moyen à 50%, Faible à 15%.

Je suis en train de faire des test avec des Split() et des boucles imbriquées, mais là suis perdu dans les méandres de mes boucles.
je fais un Split() sur les deux noms de fichier et après je teste le nombre de mots qui correspondent. mais rien ne marche. je ne vois pas comment sortir de toutes ces boucles.

Si quelqu’un a une autre idée pour résoudre ce problème je suis preneur, je cherche juste l'idée de base je me débrouille avec le code. et tout ça en VBA.

Exemple:

- 10 000 (Nom de fichier de ma base de donnée)
- 10 000 bc (Nom de fichier présent sur le disque dur)

Là j'ai deux mot identiques sur trois donc avec un critère Faible ou Moyen le fichier est ajouté à ma base de donnée. (Arrondi supérieur)
Je peux travailler soit sur des listes soit des tables. mais une ni l'autre solution ne m'inspire.


Merci de votre patiente.



Le savoir n'a de valeur que s'il est partagé.

2 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
7 mai 2016 à 23:06
Bonjour,
Je retiens que c'est là ton plaisir et respecte ceci :
Mais j'aime bien me compliquer la vie, et voilà comment

et vais donc ne pas risquer de diminuer ce plaisir et me contenter de t'inviter à t'intéresser à l'utilisation d'un objet dictionnary et à te doter d'un excellent processeur.
0
valtrase Messages postés 937 Date d'inscription lundi 19 janvier 2004 Statut Membre Dernière intervention 9 mai 2022 3
9 mai 2016 à 00:38
Merci de ta réponse ucfoutu

Je ne connais pas dictionnary et à y regarder de plus prés ça m'a l'air un tantinet compliqué.
j'ai codé ça, ça tourne mais si quelqu'un à une solution pour l'optimiser je suis preneur.
Private Sub R_cmdUpdateBase_Click()
Dim SearchQuality
Dim bolSelected As Boolean
Dim strTextSearch, strText
Dim MaxValue As Integer, TotalSelected As Integer
Dim n, i, j, k

On Error Resume Next

'On récupère la valeur de SearchQuality dans la table de paramètres
Select Case GetParam("Search.Quality", "Moyenne")
Case "Faible"
SearchQuality = 0.1
Case "Moyenne"
SearchQuality = 0.5
Case " Stricte"
SearchQuality = 1
Case Else
SearchQuality = 1


End Select
DoCmd.Minimize

With Me
.R_lstFilmBase.Selected(0) = True
.R_lstRecherche.Requery
'On ouvre le formulaire d'information d'avencement de la tache
DoCmd.OpenForm "frmSearch", acNormal, , , , acWindowNormal
Forms!frmSearch.ProgressBar2.Max = .R_lstRecherche.ListCount - 1
Forms!frmSearch.ProgressBar3.Max = .R_lstFilmBase.ListCount - 1

DoCmd.Hourglass True

' La zone de liste R_lstRecherche contient les fichiers .avi présents dans le répertoire ..\..\Récents"
For n = 0 To .R_lstRecherche.ListCount - 1
Forms!frmSearch.ProgressBar2.Value = n
Forms!frmSearch.etiTraitement.Caption = "n = " & n & "/" & Forms!frmSearch.ProgressBar2.Max & " Traitement de: " & .R_lstRecherche.Column(2, n)


' on charge le nom de fichier du disque dur
strTextSearch = Split(.R_lstRecherche.Column(2, n), " ")

' La zone de liste R_lstFilmBase contient les fichiers .avi présents dans la base de donnée
For i = 0 To .R_lstFilmBase.ListCount - 1

Forms!frmSearch.ProgressBar3.Value = i
'On charge le nom de fichier de la base

bolSelected = False: MaxValue = 0
strText = Split(.R_lstFilmBase.Column(1, i), " ")

'Si les noms de fichiers sont égaux on le sélectionne dans la liste de recherche
'et on passe au fichier suivant
If .R_lstRecherche.Column(2, n) = .R_lstFilmBase.Column(1, i) Then
.R_lstRecherche.Selected(n) = True
'bolSelected = True: Exit For
GoTo NextFile
End If


'Sinon on boucle sur tous les mots du nom de fichier
If UBound(strTextSearch) > 1 Then
For k = LBound(strTextSearch) To UBound(strTextSearch)
'La recherche est plus longue alors on sort
If k > UBound(strText) Then
Exit For
Else
If strTextSearch(k) = strText(k) Then
MaxValue = MaxValue + 1
Else
Exit For
End If
End If
Next k
End If




If MaxValue > 1 And MaxValue >= CInt((UBound(strTextSearch) + 1) * SearchQuality) Then
.R_lstRecherche.Selected(n) = True
'Exit For
'Else
'.R_lstRecherche.Selected(n) = False
End If

Next i
NextFile:
DoEvents
Next n

MsgBox .R_lstRecherche.ItemsSelected.Count & " Titres de films correspondent a " & _
(SearchQuality * 100) & "% des critères de recherche"

DoCmd.Close
DoCmd.Hourglass False

End With

End Sub

0
Rejoignez-nous