comparaison de fichiers textes avec des tableaux en mémoire. - VB/VBA/VBS - Programmation
Marsh Posté le 20-05-2006 à 21:32:49
Comme à priori tu comptes le nb de ligne de texte de tes fichiers
tu peux dimensionner tes tableaux hors des boucles
et éviter les ReDim Preserve qui s'effectuent à chaque incrémentation de ces boucles
Par curiosité si cela améliore les choses indique moi les temps avant/après
pour cela tu peux faire appel à :
Private Declare Function GetTickCount Lib "kernel32" () As Long
puis avec 2 variables Debut, Fin déclarées en Variant
Debut = GetTickCount
........
Fin = GetTickCount - Debut
puis Format(Fin / 1000, "0.0" ) pour afficher le temps passé
Marsh Posté le 21-05-2006 à 11:47:35
Merci, je vais essayer mais j'ai l'impression que le temps de chargement des fichier est négligeable et que c'est vraiment la partie comparaison qui pose problème.
En VB est il posible de déclarer un tableau et de retrouver une ligne de ce tableau sans le balayer en entier ?
Marsh Posté le 21-05-2006 à 16:45:01
ListeLigneOrigine.Ligne(indice) par exemple
il y a aussi à tenir compte de la declaration de depart
Option Base pour redéfinir la valeur par défaut d'indice de tableau de base, égale à 0 en déclarant Option Base 1
Marsh Posté le 22-05-2006 à 07:23:03
Un lien peut être utile http://www.vb-helper.com/howto_qui [...] cates.html
mais à adapter
Marsh Posté le 23-05-2006 à 01:37:38
merci pour les exemples de scripts un peu compliqué mais j'apprendrais quelquechose en passant et il y a des trucs qui ont l'air tres intéressants.
Marsh Posté le 20-05-2006 à 12:29:51
Bonjour,
Dans un cadre professionnel j'ai régulièrement besoin d'identifier les différences de paramétrage d'un progiciel travaillant sur une base de donnée sybase entre une base recette et une base préprod ou prod.
Les paramétrages sont extraits via des utilitaires dans des fichiers textes au format ascii.
Ces fichiers "ascii" sont convertis en "text" par un utilitaire sous unix
J'ai ensuite commencé a traivailler sur une macro permettant de lister les fichiers d'un répertoire (recette) puis de comparer chaque fichier au fichier equivalent de l'autre répertoire (production) pour enfin réécrire les lignes en différence dans chacun des répertoires.
Ca marche bien mais c'est lent, ca traite un mégaoctet de donnée a la minutes alors que sur des gros sites client on peut avoir plusieurs centaines de Mo de texte à comparer. SI ca prends une journée c'est pas top.
Pour rentrer dans le détails :
Une fois que mes fichiers sont chargés dans un tableau en mémoire, pour chaque ligne du premier tableau je balaye toutes les lignes du second tableau pour la rechercher, si je la trouve je les flag toutes les deux comme étant rapprochées sinon je la print dans un fichier.
Apres je balaye toutes les lignes non flagées du second tableau et je les print dans un autre fichier.
Je pense que cette partie pourrait être optimisée mais au vu de mes connaissances en vb je ne voie pas comment (déja pour l'utilisation des tableau j'ai beaucoup tatonné ...) Si on pouvait acceder au tableau via une sorte d'index pour retrouver dirrectement la ligne recherche ce serait royal est ce possible ?
Merci d'avance pour tous conseil relatif a l'optimisation de ce petit bout de code.
A+
PS : la fonction rechercher (x,y,z) permet de lister tous les fichiers d'un répertoire et de ses sous répertoires ayant une extention donné dans un tableau "Liste.recherche" mais comme c'est pas la partie qui me pose problème ...